파이썬의 기본 재귀 깊이는 1000이라고 한다. dfs함수를 재귀적으로 호출하고 있으므로 깊이를 확장해주어야 한다. (참고: https://www.acmicpc.net/board/view/85228)접근 방법dfs 문제, 지난번에 풀었던 바이러스 문제와 유사한
접근 방법문제의 조건에서 두 소수의 차이가 가장 작은 것부터 출력한다고 하였으므로 n의 절반(n//2)부터 쁠마1씩 차를 줄여나가면서 구해주면 된다.에라토스테네스의 체(소수 구하기)를 사용하여 소수를 구할 때의 시간 복잡도를 줄여준다.
접근 방법itertools의 조합 모듈을 이용해주었다.리스트로 숫자들을 입력받고 첫번 째 수(k)를 pop해준다.combinations을 사용해 6개의 숫자를 인자로 갖는 조합을 구해주었다.itertools는 파이썬에서 리스트의 조합을 구해주는 유용한 라이브러리이다.p
접근 방법표의 내용을 딕셔너리로 선언해주고, 반복문을 통해 문자열의 길이가 1이 될 때까지 반복해준다.조건문을 통해 마지막의 두 문자열(ss)이 딕셔너리 안에 있으면 문자열에서 해당 내용을 삭제하고 딕셔너리의 get을 통해 해당 두 문자열에 해당하는 value값(dna
접근 방법우선순위 큐 문제이고, heapq를 사용해 구현해주었다.heapq을 사용하면 최소힙으로 구성되므로 이를 최대 값이 루트가 되는 최대힙으로 구현해주어야 한다.heappush를 사용해 튜플을 arr에 넣어주는데, 이때 최대힙을 구현하기 위해 튜플은 s를 음수로 만
배열로 각 값을 비교하려고 했으나 시간초과가 났다.잘못된 알고리즘이라 코드를 다시 짜주었다.접근 방법b에서 a보다 작은 값 중 가장 큰 값을 찾아야 한다. 이를 위해 이분탐색으로 문제를 풀어준다.이분탐색 풀이를 위해 배열 a, b는 내림차순으로 정렬해준다.가장 큰 값의
우선순위 큐를 위해 heapq 모듈의 사용법을 알아야 한다.접근 방법우선순위 큐, 그리디 문제이다.문제 풀이를 위해 작은 수부터 2개씩 순차적으로 더해주어야 한다. heapq는 오름차순으로 저장되기 때문에 따로 정렬해줄 필요가 없다.(10+20)+(30+40)=1002
유사문제 2178번 미로 탐색접근 방법최소일수를 구하기 위해 BFS를 이용한다.토마토 값을 입력받고, 토마토가 있는 곳의 값을 큐에 추가해준다.while문을 통해 갈 수 있는 곳의 좌표를 큐에 저장해준다.(모든 값 탐색)좌표 안에 익지 않은 토마토가 있다면 해당 좌표의
접근 방법문자열 인덱스를 사용해 뒤의 두자리를 잘라주기 위해 문자열로 입력받는다.두자리를 자르고 00을 붙여준 후, while문을 통해 나머지가 0이 나올 때까지 f로 나누어준다.
접근 방법dp문제이므로 점화식을 도출해내면 된다. n=1일 때 9개, 1,2,3,⋯,9n=2일 때 17개, 10,21,23,32,34,43,45,⋯,87,89,98n=자리 수이고, 1의 자리에 오는 숫자(이하 j)가 무엇인지에 따라 앞에 올 수 있는 숫자가 달라진다.j
접근 방법유사 문제DP문제이므로 규칙을 찾으면 된다.n=1일 때, 1n=2일 때, 3n=3일 때, 5n=4일 때, 11이므로 dp\[n]=dp\[n-1]+dp\[n-2]\*2라는 점화식을 가짐을 알 수 있다.
접근 방법9명 중 7명의 난쟁이를 찾아야 하고, 7난쟁이의 키의 합이 100이므로 7명의 키의 합이 100일 때를 찾으면 된다.즉 9명의 배열의 합에서 2명의 키를 제외했을 때 100이 되는 순간을 찾으면 된다.
접근 방법 브루트포스 문제이므로 A의 길이가 B의 길이보다 작거나 같으므로 A의 길이에 맞춰서 B를 비교해주어야 한다.A를 기준으로 A의 길이만큼 B를 잘라서 비교해준다. 만약 비교결과가 다르다면 cnt를 1씩 증가해주고, 배열에 cnt값을 추가한다.배열에서 가장 작
접근 방법dp문제, 문제의 조건에 따라 길이가 2이상이면 앞 두자리는 10로 고정된다.n=2, 10n=3, 10+0,1 =>100,101n=4, 10+00,01,10 => 1000,1001,1010n=4일때, n=3 숫자(뒤에서 2자리) 2개, n=2의 1개의 숫자의
동일한 코드를 python3와 pypy3로 제출했다..ㅎ재귀로 풀면 시간초과가 발생하는 것을 알 수 있었다.접근 방법재귀를 사용하지 않고 풀어주어야 한다.n이 0과 1일 땐 각각 0과 1의 값을 가지므로 미리 dp배열에 저장해두고, 반복문을 통해 2부터 n까지 순차적으
런타임에러라는 결과가 도출되었다.https://www.acmicpc.net/board/view/81147 를 참고해 수정하였다.
접근 방법 bfs로 풀어주었다.상하좌우로 이동하면서 1인 경우 큐에 추가하고, 1을 더해 카운터 값을 증가해나간다.마지막으로 최종 카운트 값을 출력해준다
접근 방법 문제에서 제시한 의사코드를 참고해 구현해주면 된다.재귀를 사용하기에 파이썬으로 제출하면 시간초과가 발생할 것 같아 pypy3로 제출해주었다.
만만하게 봤다가 계속 틀린 문제접근 방법그냥 배열 인덱스의 합을 구해주면 시간초과가 난다. 따라서 dp로 풀어주었다.입력받은 숫자의 누적합을 dp에 저장한다.i, j를 입력받고 해당하는 값의 합을 출력해준다.