목록코팅테스트/백준 문제 모음 (296)
For Programmer
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/TjXot/btrinBPeSKJ/fWKIgHKGhoYf6LsKiIz1iK/img.png)
코드 L, C = map(int, input().split()) alphabet = list(map(str, input().split())) alphabet.sort() # 알파벳 오름차순 정렬 out = [] vowel = ['a', 'e', 'i', 'o', 'u'] # 모음 세팅 def solve(depth, idx): if depth == L: vo = 0 # 모음 개수 co = 0 # 자음 개수 for i in range(len(out)): if out[i] in vowel: # 출력할 알파벳에 모음이 있는지 없는지 체크 vo += 1 # 모음이 있으면 +1 else: # 모음이 아니라면 co += 1 # 자음에 +1 if vo >= 1 and co >= 2: # 모음이 1개 이상이고 자음이 2..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dHzxUV/btrid6XhV7D/kTbDuwncIcuhfl5PTr06JK/img.png)
코드 n, m = map(int, input().split()) array = [int(x) for x in input().split()] array.sort() # 오름차순으로 출력하기 위해 정렬 visited = [False] * (max(array) + 1) # 방문했는지 확인을 위한 리스트 out = [] # 출력을 위한 리스트 def solve(depth, idx, n, m): if depth == m: print(' '.join(out)) return for i in range(idx, len(array)): # 입력받은 배열의 원소를 돈다 if not visited[i]: # 만약 해당 원소가 방문하지 않았다면 visited[i] = True # 방문한 것으로 바꿔주고 out.append(s..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HPVVz/btrid8AEkDB/koAL4wQ6ka8A10zbKk6dKk/img.png)
코드 n, m = map(int, input().split()) array = [int(x) for x in input().split()] array.sort() # 오름차순으로 출력하기 위해 정렬 visited = [False] * (max(array) + 1) # 방문했는지 확인을 위한 리스트 out = [] # 출력을 위한 리스트 def solve(depth, n, m): if depth == m: print(' '.join(out)) return for i in array: # 입력받은 배열의 원소를 돈다 if not visited[i]: # 만약 해당 원소가 방문하지 않았다면 visited[i] = True # 방문한 것으로 바꿔주고 out.append(str(i)) # 그 값을 추가 solve..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cdxiUh/btribAdiGcN/eNj2417Zkcnf5UswUdf0n1/img.png)
코드 n, m = map(int, input().split()) out = [] def solve(depth, idx, n, m): if depth == m: print(' '.join(out)) return for i in range(idx, n + 1): out.append(str(i)) solve(depth + 1, i, n, m) out.pop() solve(0, 1, n, m) -> 인덱스값을 넘겨주고 그 값을 i값으로 맞춰주면 쉽게 해결이 가능하다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b3EBko/btriac4Y3cp/aD6aWGuI4uTIg5KNla5Fd0/img.png)
코드 n, m = map(int, input().split()) out = [] def solve(depth, n, m): if depth == m: print(' '.join(map(str, out))) return for i in range(1, n + 1): out.append(i) solve(depth + 1, n, m) out.pop() solve(0, n, m) -> 앞선 문제들(15649,15650) 과는 다르게 굳이 방문기록을 체크할 필요가 없이 재귀를 돌면 되기 때문에 더 쉽게 해결이 가능하다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tTyxn/btriadbKdfd/mVwKkDWhrcEqc2uf7a5mgk/img.png)
코드1 (인덱스 이용x) n, m = map(int, input().split()) array = [x for x in range(1, n + 1)] result = [] out = [] visited = [False] * n def solve(depth, n, m): if depth == m: out_str = sorted(out) # out값들을 정렬해서 out_str 리스트에 넣는다. if out_str not in result: # 만약 result에 out_str값이 존재하지 않는다면 result.append(out_str) # 그 값을 result에 추가 return for i in range(depth, n): if not visited[i]: visited[i] = True out.appe..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/9y52Z/btrhVs7ZT31/Dz3ECpg91p4KOBFcmcNk2K/img.png)
코드(재귀를 이용한 코드) N, M = map(int, input().split()) visited = [False] * N # 탐사 여부 check out = [] # 탐사한 수들을 담을 리스트 선언 def solve(depth, N, M): if depth == M: # 탈출 조건 print(' '.join(map(str, out))) # list를 str으로 합쳐 출력 return for i in range(len(visited)): # 탐사 check 하면서 if not visited[i]: # 탐사 안했다면 visited[i] = True # 탐사 시작(중복 제거) out.append(i + 1) # 탐사 내용 solve(depth + 1, N, M) # 깊이 우선 탐색 visited[i] = ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cyqZ1p/btrhZNbeyEj/UREJ4iMOMyJ82cQrmZnKJ0/img.png)
코드 t = int(input()) array = [0, 1, 2, 4] # 1,2,3 일때 사용되는 횟수를 미리 배열에 선언 for i in range(4, 11): #문제에서 주어진 11까지 반복 array.append(array[i - 3] + array[i - 2] + array[i - 1]) #i-3,i-2,i-1 번째에 있는 값들을 더한 값이 i번째에 등장한다. for _ in range(t): #테스트 케이스 횟수만큼 돈다 n = int(input()) print(array[n]) -> 이문제는 간단히 점화식만 찾으면 된다. i-3 + i-2 + i -1 = i 번째와 같다는 것만 구한다면 쉽게 구할 수 있는 문제이다. 그러나 이문제를 재귀를 써서 브루트 포스로 풀어야 한다면 어떻게 풀 수 ..