본문 바로가기

CodingTest/Baekjun Online Judge

(111)
[ BOJ / 파이썬 ] 15655 N과 M (6) | 제출 1 | # 백트래킹 import sys input = sys.stdin.readline #from itertools import permutations N, M = map(int, input().split()) nums = sorted(list(map(int, input().split()))) keep = [] def recur(x): if len(keep) == M: print(" ".join(list(map(str, keep)))) return for i in range(x, len(nums)): if nums[i] not in keep: keep.append(nums[i]) recur(i+1) keep.pop() recur(0) : 으아 또 이틀 쉬고 보니까 한 번에 구조가 안 읽혔다. 차..
[ BOJ / 파이썬 ] 15654 N과M (5) | 제출 1 | import sys input = sys.stdin.readline n,m = map(int, input().split()) nums = list(map(int, input().split())) nums.sort() group = [] def find(): if len(group) == m: print(' '.join(map(str,group))) return for i in range(n): if not nums[i] in group: group.append(nums[i]) find() group.pop() find() 앞선 문제들과 비교했을 때, 1부터 n까지 넣어주는 것에서 숫자배열을 차례차례 넣어주는 것으로 바뀐 것이어서 그렇게 어렵지는 않았다. 다만, 이 문제부터 봤으면 까다로웠..
[ BOJ / 파이썬 ] 15652 N과 M(4) | 제출 1 | # 백트래킹으로 구현 import sys input = sys.stdin.readline n,m = map(int, input().split()) group = [] result = [] def find(): if len(group) == m: if not sorted(group) in result: result.append(sorted(group)) return for i in range(1, n+1): group.append(i) find() group.pop() find() for r in result: print(' '.join(list(map(str, r)))) : 역시 사람은 겸손해야한다는 것을 느끼게 된 문제였다. : 이전 문제랑 답이 같은데? 뭐 고칠것 있나 해서 그냥 냈는..
[ BOJ / 파이썬 ] 15651 N과 M(3) | 제출 1 | # 백트래킹으로 구현 import sys input = sys.stdin.readline n,m = map(int, input().split()) group = [] def find(): if len(group) == m: print(' '.join(list(map(str, group)))) return for i in range(1, n+1): group.append(i) find() group.pop() find() : 우선 백트래킹 구현이다. : N과M 시리즈로 푸는 중인데, 절대 안 잊겠다 싶다. 너무 좋다 이런 반복 훈련 : 이번에는 중복 허용해서 출력하는 것이다. 아래 쪽에 백트래킹 구현 부분에서 새로운 값인 i를 넣을 때, 기존 그룹에 동일값이 있는지 체크하는 부분을 빼주기만..
[ BOJ / 파이썬 ] 15650 N과 M (2) | 제출 1 | import sys input = sys.stdin.readline from itertools import combinations n,m = map(int, input().split()) result = list(combinations(range(1,n+1), m)) for r in sorted(result): print(' '.join(list(map(str,r)))) : 파이썬의 combinations 라이브러리를 사용한 풀이입니다. : combinations는 중복 없는 순열을 찾는 라이브러리입니다. : 출력 시에 각 순열의 아이템을 str 형태로 바뀐 뒤 문자열로 붙여 출력하게 했습니다. combinations 중복조합: 중복을 허용하지 않고 뽑음. 조합이므로 순서는 상관 없음. ..
[ BOJ / 파이썬 ] 2630 색종이 자르기 + 도형 자르고 그리는 재귀 문제 공략 | 제출 1 | import sys input = sys.stdin.readline n = int(input()) paper = [list(map(int, input().split())) for _ in range(n)] paper_color = { 0: 0, 1: 0} def check_paper(x, y, n): if n == 1: paper_color[paper[x][y]] += 1 return isSame = True for i in range(n): if not isSame: break for j in range(n): if paper[x][y] != paper[x+i][y+j]: isSame = False break if isSame: paper_color[paper[x][y]] += 1 el..
[ BOJ / 파이썬 ] 2448 별 찍기 * 다시 풀기 * https://ssu-gongdoli.tistory.com/79 https://hongcoding.tistory.com/90 > 나중에 참고할 풀이 블로그 너무 어렵다.. 왜 머리가 안 돌아가지.? 이 문제 뭐지ㅠ (22.08.25) | 제출 1 | import sys input = sys.stdin.readline n = int(input()) template = [[' ',' ','*',' ',' ',' '], [' ','*',' ','*',' ',' '], ['*','*','*','*','*',' ']] def recursive(x, y, n): if n == 3: for i in range(n): for j in range(n): result[x+i][y+j] = template[i][j] ret..
[ BOJ / 파이썬 ] 2447 별 찍기 | 제출 코드 | import sys input = sys.stdin.readline n = int(input()) stars = [[" "]*n for _ in range(n)] def draw_block(k, x, y): if k == 1: stars[x][y] = '*' return for i in range(3): for j in range(3): if i == 1 and j == 1: continue draw_block(k//3, x+(k//3)*i, y+(k//3)*j) draw_block(n, 0, 0) for s in stars: print(''.join(s)) 뭐 정답 처리는 되긴 했다. 그런데 백퍼센트 내 힘으로 푼게 아니라서 찝찝하다. 대신 설명을 자세히 남겨야겠다. 일단 내가 문제가..
[ BOJ / 파이썬 ] 17478 재귀 함수가 뭔가요? 재귀함수에 대해서 간단하게 이해해보기 좋은 문제였다. 재귀함수 시작 전 메시지, 시작 후 반복되는 메시지, 재귀 끝날 타이밍 마주쳤을 때 메시지, 재귀 끝내고 돌아가며 반복해 남기는 메시지가 나뉘기 때문이었다. 사실 재귀 문제는 저 4타이밍에서 어떤 동작을 할 지 짜주면 되는 게 다인데, 가끔 어려운 문제에서 구조적인게 아리까리하면 그 내용도 헷갈리기 때문에 저런 시점을 정확하게 파악하는 것이 중요하다. / 제출 1 / import sys input = sys.stdin.readline n = int(input()) def recur(i,n): for k in range(i): print('____', end="") print("\"재귀함수가 뭔가요?\"\n") if i == n: for k in ran..
[ BOJ / 파이썬 ] 1600 말이 되고픈 원숭이 보호되어 있는 글입니다.