코딩테스트 59

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..

python 코딩테스트 - 그리디, 구현

그리디(Greedy Algorithm) 그리디 알고리즘(탐욕법)은 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미한다. 그리디 해법은 단순히 가장 좋은 걸 선택하면 그것이 최적의 해인지 그 정당성을 판단하는 것이 매우 중요. 예제) 처음 든 생각 - 큰 놈이 중요한가, 작은 놈이 중요한가 - 일단 정렬을 해야겠다 - 그룹을 많이 만들어야되니깐 일단 작은 놈들부터 최대한 그룹을 짓는 게 유리하겠다 나의 답안 n = list(map(int, input().split())) n.sort() result = 0 count = 0 for i in n: count+=1 if count >=i: result +=1 count = 0 print(result) 공포도가 1이라면 빠르게 1명만 그룹으로 판단하는 것..

javascript 코딩테스트 - 선택 정렬(selection sort)

저번에 살펴본 버블 정렬 bubble sort가 최댓값을 맨 뒤에 확정지을 때까지 스왑을 하는 거였다면 선택 정렬 selection sort는 최솟값을 맨 앞에 확정 짓는 것을 반복하는 것이다. 마찬가지로 순서대로 원리를 살펴보자. 1. 배열을 돌면서 최솟값을 찾는다. 2. 최솟값을 찾은 후에 그 원소와 배열의 맨 앞 원소의 위치를 바꿔준다. 3. 그러면 확정된 최솟값을 제외한 나머지 원소들에 대해 똑같은 과정을 반복한다. 예를 들어 [5, 3, 4, 1, 2]가 있다고 해보자. 그러면 처음에 5만 살펴보면 최솟값은 5로 설정된다. (최솟값 = 5) 그 다음 3을 살펴보면 5보다 작기 때문에 최솟값은 3으로 업데이트 된다. (최솟값 = 3) 그 다음 4를 살펴보면 3보다 크기 때문에 최솟값은 바뀌지 않는..

728x90