본문 바로가기
[BOJ #2447] 별 찍기 - 10 BOJ #2447, 별 찍기 - 10 문제입니다. 이전에 해 오던 별 찍기랑은 꽤 다른 문제입니다. 이 문제의 핵심은 재귀(recursion)입니다. 문제에서 재귀라는 단어가 언급되기도 하였으므로 재귀를 이해하고 있는 사람이라면 어렵지 않게 풀 수 있을 것이라고 생각합니다. 입력으로는 3의 거듭제곱 수(3, 9, 27, ...)가 주어집니다. 출력으로는 N * N 크기의 패턴을 출력해야 합니다. 패턴은 이렇습니다. 우선 N == 3인 경우엔 다음과 같이 출력합니다. 이것이 base case가 됩니다. *** * * *** N > 3인 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N / 3) * (N / 3) 정사각형을 크기 N / 3의 패턴으로 둘러싼 형태가 됩니다. 따라서 N == 27인 경우 .. 2020. 7. 14.
[BOJ #1543] 문서 검색 BOJ #1543, 문서 검색 문제입니다. 입력으로 문서(문자열)와 단어가 주어집니다. 문서 속에서 단어가 총 몇 번 등장하는지 출력하면 됩니다. 단, 일반적인 방법으로 앞에서부터 탐색하면 안 됩니다. 자세한 사항은 예시를 참고해서 이해하는 것이 편합니다. 예를 들어, 문서 doc == 'abababa'이고 찾으려는 단어 word == 'ababa'이면 doc[0:len(word)] == doc[2:2+len(word)] == word입니다. 이런 상황에서 doc[0:len(word)]와 doc[2:2+len(word)]의 두 가지를 모두 count하면 안 됩니다. 둘 중 하나만 count해야 합니다. 사실 이것을 설명하면서 doc에 doc[index:index+len(word)]로 접근한 것이 이 문제.. 2020. 7. 14.
[BOJ #15965] K번째 소수 BOJ #15965, K번째 소수 문제입니다. 문제는 간단합니다. 입력으로 K가 주어지면 K번째 소수를 찾아 출력하면 됩니다. 그러나 K의 범위에 따라 서브태스크가 여럿 존재하는 것으로 보아 K의 범위가 문제풀이에 중요하게 작용할 것이라고 예측할 수 있습니다. 이 문제에서는 최대 50만번째 소수를 2초 안에 찾아내야 하므로, 일반적인 방법으로는 시간이 부족할 것으로 보입니다. 1. 소수 구하기 1번째 방법 2 이상의 자연수 N에 대해, N이 1과 N을 제외하고 어떤 자연수로도 나누어 떨어지지 않을 때 그 수를 소수라고 합니다. 가장 원시적인 방법으로는 다음 코드가 가능하겠습니다. def is_prime(N): if N == 2: return True else: for i in range(2, N): if.. 2020. 7. 13.