분류 전체보기 183

백준 1780 - 종이의 개수

처음 든 생각 - 어제 한 쿼드트리랑 구조가 아예 똑같고 나누는 숫자만 다르네 - 0,1,-1로 다 차있는지 아닌지 비교해서 아니면 분할해서 다시 검색하는 방식으로 재귀를 구성하면 되겠다. 나의 답 import sys input = sys.stdin.readline N = int(input()) arr = [list(input().split()) for _ in range(N) ] zero = 0 one = 0 minus = 0 def nine_tree(x,y,n): global zero, one, minus total = 0 start = arr[x][y] for i in range(x,x+n): for j in range(y,y+n): if start != arr[i][j]: total = float..

백준 1992 - 쿼드트리

처음 든 생각 - 아까 복습한 색종이 만들기 문제랑 완전 판박이네 - 4개로 분할할 때에 추가적으로 괄호가 들어가야하네 - 모두 0/1일 때 결과를 리턴함으로서 재귀 리턴 조건을 맞춰주고 - 4개로 분할할 경우 괄호를 포함한 재귀함수를 리턴해야겠다. 나의 답 import sys input = sys.stdin.readline N = int(input()) arr = [list(input()) for _ in range(N) ] def search(x,y,n): zero_count = 0 for i in range(n): for j in range(n): if arr[x+i][y+j] == "0": zero_count += 1 if zero_count == n*n: return "0" elif zero_c..

백준 2630 - 색종이 만들기

처음 든 생각 - 정사각형이 성립하는지 안하는지 판단한 다음 - 정사각형이 만들어지지 않는다면 다시 4개로 쪼개서 확인한다. - 크기가 1인 정사각형일 때가 재귀 탈출 조건일 것이다. 나의 답 import sys input = sys.stdin.readline N = int(input()) arr = [] for _ in range(N): arr.append(list(map(int,input().split()))) blue = 0 white = 0 # 사각형 별 시작 좌표 + 크기 를 받아서 def search(sr, sc, n): global blue, white # 1의 갯수를 센다 blue_count = 0 for i in range(sr,sr + n): for j in range(sc,sc+n):..

백준 24511 - queuestack

처음 든 생각 - 흠 이게 뭔 소리지 -> 종이에 하나씩 차근차근 써가면서 읽어보니 이해됐다. - 아 결국 큐에 있는 애들만 원소를 바꿔치기 하면 되겠구나 나의 답 import sys from collections import deque input = sys.stdin.readline N = int(input()) isStack = list(map(int, input().split())) arr = list(map(int, input().split())) M = int(input()) new = list(map(int, input().split())) q = deque() for i in range(N): if isStack[i] == 0: q.append(arr[i]) q.reverse() result..

백준 28279 - 덱 2

처음 든 생각 - 그냥 큐의 메서드만 잘 활용하고 출력값만 실수하지 말자 - 아 input 말고 sys.stdin.readline 쓰자 -> 예전에 로직은 다 맞았는데 input 때문에 시간 초과 났던 문제가 있어서 ptsd가 왔다. 나의 답 import sys from collections import deque N = int(sys.stdin.readline()) q= deque() for _ in range(N): cmd = list(map(int, sys.stdin.readline().split())) n = cmd[0] if n == 1: q.appendleft(cmd[1]) elif n == 2: q.append(cmd[1]) elif n==3: if len(q) == 0: print(-1) ..

백준 4779 - 칸토어 집합

처음 든 생각 - 재귀로 3 그룹씩 쪼개가면서 풀면 되겠다. - 근데 리턴 조건을 어떻게 설정해야 되지...? 나의 답 def cantor(n): if n == 1: return "-" else: left = cantor(n//3) center = " " * (n //3) return left + center + left while True: try: N = int(input()) result = cantor(3**N) print(result) except: break 3개의 그룹으로 쪼개고 왼쪽 오른쪽은 또 칸토어한 결과를 더해주는 것이다. N = 2를 예시로 들면 cantor(3) | " " 3개 | cantor(3) cantor(1) " " cantor(1) | " " 3개 | cantor(1) "..

SWEA 5177 - 이진 힙

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVJ-_6qfsDFAWg&&# 처음 든 생각 - 노드의 개수+1 개 만큼 담을 수 있는 힙을 불러와주고 - 하나씩 append하면서 부모 노드와 비교하면서 필요한 경우 스왑을 해줘야겠다. 나의 답 T = int(input()) from collections import deque for test_case in range(1, T + 1): N = int(input()) num_list = deque(list(map(int, input().split()))) min_heap = [0] def check_parent(i): gl..

SWEA 5147 - Subtree

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVJ-_6qfsDFAWg&&# 처음 든 생각 - 부모와 자식 간의 관계임을 어떻게 나타낼까 -> [부모 , [자식들 노드] ] 형식으로 번호에 맞춰 매겨야겠다. - subtree 노드 개수를 확인하기 위해 DFS를 해야겠네 -> DFS 코드 구현 어떻게 했더라... 나의 답 T = int(input()) for test_case in range(1, T + 1): E,N = map(int, input().split()) tree =[ [0,[]] for _ in range(E+2)] visited = [0 for _ in r..

SWEA 5110 - 수열 합치기

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVJ1r6qfkDFAWg 처음 든 생각 - 반복문으로 새로운 수열의 첫째 원소랑 기존 배열의 원소들과 하나씩 비교해주면서 위치를 찾은 다음 합쳐주면 되겠다 나의 답 T = int(input()) for test_case in range(1, T + 1): N, M = map(int, input().split()) arr = [float('inf')] cnt = 0 for _ in range(M): a = list(map(int, input().split())) for i in range(N*cnt+1): if a[0] < a..

백준 2580 - 스도쿠 python

처음 든 생각 - 행, 열, 3*3 모두 고려를 해줘야겠네 - 무조건 1개만 남겨저서 풀 수 있는 놈이 있을테니 그걸 중심으로 풀어나가면 되겠다 -> 라고 생각한 것이 크나큰 오산이었다. 예를 들어 어떤 0은 열을 검사했을 때는 1,2가 가능하고 행을 검사했을 때 2,3,6이 가능하다고 했으면 이 녀석은 2로 확정지을 수 있다. 즉, 무조건 1개만 남겨져서 풀겠다는 어마어마한 경기도 오산이었고 오직 예제에서만 가능한 경우였다. 가능한 후보군에 대하여 하나하나씩 다 검사를 했어야 한다. (답지 보고 푼) 나의 답 import sys input = sys.stdin.readline s = [] zero_q = [] for i in range(9): temp_list = list(map(int, input()..

728x90