분류 전체보기 180

백준 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()..

SWEA 5102 - 노드의 거리

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVIoJqqfYDFAWg 처음 든 생각 - 이건 무조건 BFS다 -> 큐로 구현하고 방문 여부에 따라 반복문으로 노드를 하나씩 추가해주면서 확인하면 된다 - 이동한 거리를 측정하기 위해서 노드 번호와 거리를 같이 다뤄야겠다. 나의 답 T = int(input()) from collections import deque for test_case in range(1, T + 1): V, E = map(int,input().split()) g = [[] for _ in range(V+1) ] for _ in range(E): a,b..

SWEA 5099 - 피자 굽기

처음 든 생각 - 전체 피자를 관리하는 큐와 화덕의 큐 두 개를 생성해야겠다 - 화덕 큐에 피자가 없어질 때까지 반복문을 돌고 popleft, append를 조건에 따라 처리해주면 되겠다. 나의 답 T = int(input()) from collections import deque for test_case in range(1, T + 1): N,M = map(int, input().split()) every = list(map(int, input().split())) for i in range(len(every)): every[i] = [i+1, every[i]] q_pizza = deque(every) q_fire = deque([q_pizza.popleft()]) result = [] while q_..

SWEA 5105 - 미로의 거리

처음 든 생각 - BFS로 거리에 따라 하나씩 탐색을 해야겠다. - 3인 점을 처음 발견하면 그 때가 최소 거리가 될테니깐 함수를 중단하면 되겠다. - 방문한 사실 확인 + 출발점에서의 거리를 한 번에 계산해야겠다. 나의 코드 T = int(input()) from collections import deque for test_case in range(1, T + 1): N = int(input()) a= [[] for _ in range(N)] starting =[0,0] for i in range(N): a[i] = list(map(int, list(input()))) if 2 in a[i]: starting[0] = i starting[1] = a[i].index(2) q = deque() q.app..

728x90