목록Coding/Coding Test & Algorithm (60)
호기심 많은 분석가

2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net from sys import stdin com_dic = {} for i in range(int(stdin.readline())) : com_dic[i+1] = set() for _ in range(int(stdin.readline())) : temp = list(map(int, stdin.readline().split())) com_dic[temp[0]].add(temp[1]) com_dic[temp[1]].add(temp[0]) def dfs(start, com_..

1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 이번 문제는 굉장한 스토리텔링이 있는 문제기에 접속하여 읽어보면 재밌을 듯하다. import sys n, m = map(int, sys.stdin.readline().split()) dogam = [sys.stdin.readline().rstrip() for _ in range(n)] dogam_dic = {} for i in range(len(dogam)) : dogam_dic[dogam[i]] = i+1 for i in range..

import sys n, m = map(int, sys.stdin.readline().split()) lis = set(sys.stdin.readline().rstrip() for _ in range(n)) see = set(sys.stdin.readline().rstrip() for _ in range(m)) ans = sorted(lis.intersection(see)) print(len(ans)) for i in ans : print(i) Solved.ac의 CLASS별로 문제를 풀고 있는데 이번 CLASS의 주제는 메모리와 시간 초과인가 보다. list를 사용해서 풀었더니 어림도 없었고, 중복되는 항을 찾기 위해 set의 intersection이라는 문법을 사용하였다. 사전 순으로 출력을 위해 s..

11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net import sys n = int(sys.stdin.readline().rstrip()) result = set() for _ in range(n) : com = sys.stdin.readline().split() if len(com)==1 : if com[0] == 'all' : result = set([k for k in range(1, 21)]) else : result = set() else : cd, x = com[0], int(com[1]) if cd == 'add' : result.ad..

9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net def isVPS(data) : while True : data = "".join(data) if '()' not in data : break data = data.split('()') if len(data) : print('NO') else : print('YES') import sys n = int(input()) for _ in range(n) : isVPS(sys.stdin.readline().strip()) 풀이✒️ 우리는..

2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net def show_result(data) : if len(data)==1 : return data else : if len(data)%2==0 : data = data[1::2] else : temp = [data[-1]] temp.extend(data[1::2]) data = temp return show_result(data) n = int(input()) arr = [i+1 for i in range(n)] answer = show_result(arr) pr..

10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net import sys from collections import Counter n = sys.stdin.readline().strip() arr1 = sys.stdin.readline().split() m = sys.stdin.readline().strip() arr2 = sys.stdin.readline().split() ct = Counter(arr1) print(' '.join(f'{ct[i]}' for i in arr2)) ..

15881번: Pen Pineapple Apple Pen 여러 개의 사과, 파인애플, 그리고 펜이 일렬로 세워져 있다. 이 물건들의 순서를 바꾸지 않고 옆에 있는 물건끼리 연결했을 때, 펜-파인애플-애플-펜을 몇 개나 만들 수 있을지 세어보자. 단, 펜, www.acmicpc.net import sys n = int(sys.stdin.readline().strip()) arr = sys.stdin.readline().strip() ck = [1]*len(arr) result = 0 for i in range(len(arr)-3) : if arr[i:4+i] == 'pPAp' : if sum(ck[i:4+i])== 4 : result += 1 ck[i], ck[i+3] = 0, 0 print(result)..

1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net import sys def is_prime(x) : import math if x < 2 : return False for i in range(2, int(math.sqrt(x))+1): if x%i == 0 : return False return True n = int(sys.stdin.readline().strip()) arr = list(map(int, sys.stdin.readline().split())) result = 0 for i in arr : if is_prime(i) : result +=1 print(result..

10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net import sys n = int(sys.stdin.readline().strip()) arr = [sys.stdin.readline().split() for i in range(n)] new_arr = sorted(arr, key=lambda x : int(x[0])) for i in new_arr : print(i[0], i[1]) sort를 나이에 대해서만 해주면 기입한 순서는 그대로 유지가 되므로 건드리지 않아도 된다. print() 구문 안에 여러 개의 원소를..