접근법 브루트 포스의 문제는 조금은 무식하게 보일지 모르지만 모든 경우의 수를 보는 것이 맞다. 물론 지금 이 문제는 python의 itertools를 이용해서 조합을 통해 쉽게 풀 수도 있지만 알고리즘의 측면에서 풀어보자. 우선 필자는 아래 코드로 문제를 풀었다. N, M = map(int,input().split(' ')) card = list(map(int,input().split(' '))) res = set() for i in range(N-1): pick = card[i:i+2] # 카드 두 장을 먼저 뽑습니다 other = [x for x in card if x not in pick] # 뽑은 두 장의 카드를 제외한 카드를 리스트에 담습니다. for j in other: if M >= sum..
영어로는 Variable로 문자나 숫자 같은 데이터를 담는 컨테이너다. 여기에 담겨진 데이터는 다른 데이터로 바꿀 수 있으며 마치 자연어에서 대명사와 비슷한 역할을 한다. 변수를 사용하는 이유는 코드를 파악하는데 있어서 가독성이 증가하기 때문에 코드를 쉽게 이해할 수 있게 해주고 로직을 수정할 때도 변수에 할당된 값만 바꾸면 되기 때문에 유지 보수에 용이하게 해주기 때문이다. 거두절미하고 정수, 실수, 문자열의 변수를 선언하고 할당하는 방법에 대해서 살펴보자. 정수 public class IntegerDemo { public static void main(String[] args) { int a; a = 1; System.out.println(a+1); // 2 a = 3; System.out.print..
접근법 재귀의 대표적인 문제 하노이 탑이다. 우선 아래 원판이 4개인 경우를 역순으로 진행해보자. 먼저 4개의 원판을 전부 3위치에 옮겨 놓기 위해서는 아래처럼 2번 위치에 1번, 2번, 3번 원판이 위치해 있어야한다. 그래야 4번 원판을 3번 위치의 가장 아래에 놓을 수 있기 때문이다. 자 그럼 2번 위치에 1, 2, 3 원판이 위치하기 위해서는 1, 2번 원판은 3번에 있어야 한다. 그래야 3번 원판을 2번 위치에 놓을 수 있기 때문이다. 또한 마찬가지로 1, 2번 원판이 3번 위치에 있기 위해서는 1번 원판을 우선 2번 위치에 두어야 한다. 그래야 2번 원판을 3번 위치에 놓을 수 있기 때문이다. 쉽게 일반화 해보자. 가장 먼저 해야할 일은 원판의 갯수 n개가 주어졌을 때, Step 1 : n-1개..
접근법 사실 어떤 규칙이 있는지 찾는데도 시간이 오래 걸렸다. 우선 규칙은 예시로 나와있는 출력을 아래와 같이 줄을 그어보면 찾을 수 있다. 크게 3 * 3 형태의 사각형만 주목해서 보다 보면 정가운데만 공백으로 이루어져 있는 것을 볼 수 있다. 즉, 재귀로 풀 수 있는 냄새가 풀풀난다. 그래서 필자는 문제를 아래와 같이 접근해 보았다. n은 3의 제곱꼴인 수로만 등장하므로 이 규칙을 따라갈 필요가 있다. 규칙에 따라서 주어진 길이에서 3으로 나눈 몫이 1일 경우에는 아예 중앙이 뚫리는 형태, 그 외 몫이 다른 값일 경우에는 최초로 3 * 3의 [ '***', '* *', '***' ] 형태의 사각형이 그대로 채워지는 형태로 코드를 짜보았다. 풀이 def stars(n): matrix=[] for i i..
풀이 def factorial(n): if n == 1 or n == 0: return 1 return n * factorial(n-1) n = int(input()) print(factorial(n)) 접근법 재귀 중에서도 가장 간단한 문제다. 전체적인 흐름을 보면 다음과 같다. 1 2 * factorial(1) 3 * factorial(2) 4 * factorial(3) 5 * factorial(4) 우선, 위처럼 값을 모두 쌓아둔다. (push) 그리고 각 값을 출력할 때, 메모리 입장에서는 factorial() 값을 모르기 때문에 pop을 해서 factorial(1) = 1 과 같이 값을 거꾸로 찾아간다. 즉, 2 * factorial(1) = 2 * 1 3 * factorial(2) = 3 * ..