[PS] 순열, 조합, 중복순열, 중복조합의 구현
·
Problem solving
순열(Permutation)(1) 값을 반환def permutation(n,r): def factorial(n): if n (2) 순서쌍을 반환# boj-15649def permutation(arr, m): used = [0 for _ in range(len(arr))] def generate(chosen,used): if len(chosen) == m: for x in chosen: print(x,end=" ") print(); return for i in range(len(arr)): if not(used[i]): chosen.append(arr[i]); used..
[PS] 병합 정렬(mergeSort) 문제에서 시간 초과 오류 발생하는 경우
·
Problem solving
BOJ-2751, BOJ-24060병합 정렬 알고리즘에서 시간 초과 오류가 발생하는 경우 해결하는 방법이다.시간 초과가 발생하는 코드import sysn = int(sys.stdin.readline().split())a = list(map(int, sys.stdin.readline().split()))def merge(a,p,q,r): temp = [0 for _ in range(n)] # temp를 merge 함수 안에서 선언하면 재귀적으로 호출 될 때마다 선언되므로 시간이 낭비된다!! i = p; j = q+1; t = 0 while i a[j]: temp[t] = a[j]; j += 1; t += 1 else: temp..
[PS] 이코테 16-36 : 편집 거리
·
Problem solving
문제두 개의 문자열 A와 B가 주어졌을 때, 문자열 A를 편집하여 문자열 B로 만들고자 한다. 1. 삽입(Insert) : 특정한 위치에 있는 하나의 문자를 삽입 2. 삭제(Remove) : 특정한 위치에 있는 하나의 문자를 삭제 3. 교체(Replace) : 특정한 위치에 있는 하나의 문자를 다른 문자로 교체 이때 편집 거리란 문자열 A를 편집하여 문자열 B로 만들기 위해 사용한 연산의 수를 의미함, A를 B로 만드는 최소 편집 거리를 계산하는 프로그램을 작성하시오.입력 두 문자열 A와 B가 한 줄에 하나씩 주어짐출력 : 최소 편집 거리를 출력 이 문제는 2차원 테이블과 점화식을 이용하여 문제를 해결할 수 있다. : su--> sa 만든 후에 ..
[PS] 이코테 17-39 : 화성 탐사
·
Problem solving
문제화성 탐사 기계가 출발 지점에서 목표 지점까지 이동 할 떄 최적의 경로를 찾도록 개발해야 함화성 탐사 기계가 존재하는 공간은 N x N 크기의 2차원 공간이며, 각각의 칸을 지나기 위한 비용(에너지 소모량)이 존재한다.가장 왼쪽 위 칸인 [0][0]에서 가장 오른쪽 아래 칸인 [N-1][N-1] 위치로 이동하는 최소 비용을 출력하는 프로그램을 작성하시오.화성 탐사 기계는 특정한 위치에서 상하 좌우 인접한 곳으로 1칸씩 이동할 수 있다.입력첫째 줄에 테스트 케이스의 수 T가 주어짐, 매 테스트 케이스의 첫째 줄에는 N이 주어짐, 이어서 N개의 줄에 걸쳐 각 칸의 비용이 주어지며 공백으로 구분됨출력각 테스트 케이스마다 [0][0] 에서 [N-1][N-1]까지 이동하는 최소 비용을 한 줄에 하나씩 출력풀이..
[PS] 이코테 17-38 : 정확한 순위
·
Problem solving
문제선생님은 시험을 본 학생 N명의 성적을 분실하였고, 성적을 비교한 결과의 일부만 가지고 있다.학생 N명의 성적은 모두 다른데, 다음은 6명의 학생에 대하여 6번만 성적을 비교한 결과이다. 1번 학생의 성적 3번 학생의 성적 4번 학생의 성적 4번 학생의 성적 5번 학생의 성적 5번 학생의 성적 이를 통해 순위를 정확히 알 수 있는 학생도 있고, 알 수 없는 학생도 있다. 예를 들어 1번, 3번, 5번 학생은 모두 4번 학생보다 성적이 낮다고 볼 수 있고, 4번 학생은 2번 학생과 6번 학생보다 성적이 낮으므로정리하면, 4번 학생보다 성적이 낮은 학생은 3명이고, 성적이 높은 학생은 2명이므로 4번 학생의 성적 순위를 정확히 알 수 있다...
[PS] boj_2563 : 색종이
·
Problem solving
문제가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.입력첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과..
[PS] boj_2869 : 달팽이는 올라가고 싶다
·
Problem solving
문제땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.입력첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B 출력첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.시간 제한 : 0.15초방법 1반복문을 돌리면서 낮에는 +a 밤에는 -b를 하며 half(반나절)를 1씩 증가시키다가 v보다 커지는 순간 break하고 half의 홀.짝에 따라 값을 출력하는 방법 -> 시간 초과 발생! import sysa, b, v..
[PS] boj_4673 : 셀프 넘버
·
Problem solving
문제셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...n을 d(n)의 생성자라고 한다..