CodingTest 432

[baekjoon] 백준 1525번(파이썬): 퍼즐

문제 1525번: 퍼즐 세 줄에 걸쳐서 표에 채워져 있는 아홉 개의 수가 주어진다. 한 줄에 세 개의 수가 주어지며, 빈 칸은 0으로 나타낸다. www.acmicpc.net 알고리즘 - bfs 탐색을 통해 문제를 수행한다. - 퍼즐 모양과 그 모양을 만들기까지 걸린 횟수를 딕셔너리형을 처리하여 무한 루프에 빠지지 않게 하고 답을 도출한다. - 빈 공간(0)에 인덱스를 찾고 그래프에서 빈 공간의 x 좌표와 y 좌표를 찾는다. - 상/하/좌/우를 탐색하여 빈 공간의 인덱스와 현재 좌표를 바꾼다. - 현재 퍼즐 모양이 없다면 딕셔너리에 추가하고 이 과정을 반복하여 정리된 모양의 퍼즐을 찾는다. 코드 import sys from collections import deque # bfs 탐색 def bfs(): d..

CodingTest/Baekjoon 2021.10.16

[baekjoon] 백준 1939번(파이썬): 중량제한

문제 1939번: 중량제한 첫째 줄에 N, M(1 ≤ M ≤ 100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1 ≤ A, B ≤ N), C(1 ≤ C ≤ 1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이 www.acmicpc.net 알고리즘 - 이분 탐색과 bfs 탐색을 통해 문제를 수행한다. - 이분 탐색을 통해 현재 중량을 구하고 그 중량으로 다리를 건널 수 있는지 bfs 탐색을 통해 확인한다. 코드 import sys from collections import deque # bfs 탐색 def bfs(): queue = deque([start]) visited[start] = True # 큐가 없을 때까지 반복 while..

CodingTest/Baekjoon 2021.10.15

[baekjoon] 백준 7662번(파이썬): 이중 우선순위 큐

문제 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 알고리즘 - 테스트 케이스만큼 반복하고 연산의 수만큼 반복하여 연산을 수행한다. - 삽입 연산인 경우 최대 힙과 최소 힙을 나누어 푸시하고 정수의 여부를 체크한다. - 제거 연산의 경우 조건문을 통해 최대 힙을 제거할 건지 최소 힙을 제거할 건지 확인한다. - 최대 힙이나 최소 힙 모두 반복문을 통해 이미 제거된 정수가 있는지 확인하고 있다면 팝하여 제거한다. - 그 후 최대 힙이나 최소 힙을 팝하여 제거한다. - 연산이 끝나고 정수가 없다면 "EMPT..

CodingTest/Baekjoon 2021.10.14

[baekjoon] 백준 3986번(파이썬): 좋은 단어

문제 3986번: 좋은 단어 이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에 www.acmicpc.net 알고리즘 - 단어의 수만큼 반복하여 단어를 확인한다. - 반복문을 통해 입력받은 단어의 문자열을 확인한다. - 스택 구조를 이용하여 스택의 마지막 요소와 현재 탐색하고 있는 요소가 같으면 아치형이 되므로 스택의 마지막 요소를 팝해준다. - 그렇지 않다면 스택에 추가한다. - 반복문을 끝내구 스택의 길이가 1이면 아치형으로 모두 연결된 것으로 좋은 단어이다. - 스택에 길이가 1인 이유는 처음에 스택에 0을 넣었기 때문이다. 코드 import sys n = int(sy..

CodingTest/Baekjoon 2021.10.13

[baekjoon] 백준 1302번(파이썬): 베스트셀러

문제 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 알고리즘 - collections 모듈에 Counter 클래스를 사용한다. - 람다 정렬을 통해 개수를 내림차순으로, 이름을 오름차순으로 정렬한다. 코드 import sys from collections import Counter n = int(sys.stdin.readline()) temp = [] for _ in range(n): temp.append(str(sys.stdin.readline().strip())) res = Counter(temp..

CodingTest/Baekjoon 2021.10.12

[baekjoon] 백준 2161번(파이썬): 카드1

문제 2161번: 카드1 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 알고리즘 - pop(), append() 함수를 잘 이용하여 문제를 수행한다. - 카드를 버리고 난 후에 카드가 없다면 반복문을 멈출 수 있게 코드를 작성한다. 코드 import sys n = int(sys.stdin.readline()) card = [i for i in range(1, n + 1)] res = [] while True: res.append(card.pop(0)) # 제일 위에 있는 카드를 바닥에 버린다. if not card: # 위에서..

CodingTest/Baekjoon 2021.10.11

[baekjoon] 백준 7785번(파이썬): 회사에 있는 사람

문제 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net 알고리즘 - 반복문을 통해 출입 기록을 확인한다. - 방문자의 출퇴근 여부를 통해 방문자를 추가하거나 제거한다. - 사전 순의 역순으로 정렬하여 출력한다. 코드 import sys n = int(sys.stdin.readline()) temp = dict() # 딕셔너리 형 # 반복문을 통해 출입 기록울 확인한다. for _ in range(n): a, b = map(str, sys.stdin.readline().sp..

CodingTest/Baekjoon 2021.10.11

[baekjoon] 백준 4195번(파이썬): 친구 네트워크

문제 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net 알고리즘 - union-find 알고리즘을 통해 문제를 수행한다. - 친구의 부모 노드를 찾고 부모 노드의 탐색 횟수를 출력한다. 코드 import sys sys.setrecursionlimit(10 ** 6) # a가 속한 집합과 b가 속한 집합 합치기 def union(x, y): # 각 친구의 부모 노드를 찾는다. x = find(x) y = find(y) # 부모 노드가 같으면 리턴 if x == y: return else: # 부모 노드..

CodingTest/Baekjoon 2021.10.10

[baekjoon] 백준 11652번(파이썬): 카드

문제 11652번: 카드 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지 www.acmicpc.net 알고리즘 - collections 모듈에 Counter 클래스를 사용하여 문제를 수행한다. - 입력받은 숫자 카드를 오름차순으로 정렬한다.(카드의 개수가 똑같을 경우 작은 정수 값을 출력하기 때문에) - 반복문을 통해 카드를 확인하면서 카드의 개수를 비교해준다. 코드 import sys from collections import Counter # collections 모듈에 Counter 클래스 사용 n = int(sys.stdin.readline())..

CodingTest/Baekjoon 2021.10.09

[baekjoon] 백준 5052번(파이썬): 전화번호 목록

문제 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net 알고리즘 - 테스트 케이스만큼 반복한다. - 전화번호를 문자열로 입력받아 오름차순으로 정렬한다.(사전순으로 정렬) - 반복문을 통해 전화번호를 확인한다. - 현재 전화번호의 문자열과 다음 전화번호의 현재 전화번호 길이만큼의 문자열을 비교한다. - 같으면 일관성이 없는 것이고 다르면 일관성이 있는 것이다. 코드 import sys t = int(sys.stdin.readline()) for _ in range(t): n = int(sy..

CodingTest/Baekjoon 2021.10.08