🧩 Programming Languages/Python CodingTest 29

백준 1735번(silver 3) : 분수 합

1735번: 분수 합 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다. www.acmicpc.net 내가 작성한 코드 - 정답 import math a, b = map(int, input().split()) c, d = map(int, input().split()) rf_m = a*d+b*c rf_d = b*d gcd = math.gcd(rf_m, rf_d) print(rf_m//gcd, rf_d//gcd)

백준 1934번(bronze 1) : 최소공배수 (math 라이브러리 활용)

1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net 내가 작성한 코드 - 시간초과 n = int(input()) LCM = [[*map(int, input().split())] for _ in range(n)] answer = [] for i in range(len(LCM)): for j in range(max(LCM[i][0], LCM[i][1]), LCM[i][0]*LCM[i][1]+1): if j % LCM[i][0] == 0 and j % LCM[i][1] == 0: print(j) #..

백준 11478번(silver 4) : 서로 다른 부분 문자열의 개수 (인덱싱, set 선언)

11478번: 서로 다른 부분 문자열의 개수 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. www.acmicpc.net 내가 작성한 코드 - 풀이 참고하여 풀었다ㅠ import sys input = sys.stdin.readline s = input().rstrip() result = [] for i in range(len(s)): for j in range(i+1, len(s)+1): result.append(s[i:j]) print(len(set(result))) 주의해야할점 (1) 인덱싱은 -1 for 문의 range 처럼 인덱싱은 끝숫자-1 까지 인덱싱 되기 때문에 이 점도 참고하여 중첩 for문에 range를 +1 을 해야한다. 주의해야할점..

백준 1269번(silver 4) : 대칭 차집합 (두 리스트 간 집합 구하기)

1269번: 대칭 차집합 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어 www.acmicpc.net 앞서 푼 문제와 더불어 리스트의 집합 문제가 나왔다. 일단 차집합을 어떻게 구하는지 몰라서 풀이를 참고하였는데, 이번 기회에 모든 집합을 알아두어야겠다. 1. 합집합 새로운 리스트 명 = list(set(A) | set(B)) #또는 새로운 리스트 명 = list(set().union(A, B)) 2. 교집합 새로운 리스트 명 = list(set(A) & set(B)) #또는 새로운 리스트 명 = list(set(A).intersection(B)) 3. 차..

백준 1764번(silver 4) : 듣보잡 문제 (리스트 교집합 & , join)

1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 내가 작성한 코드 - 시간 초과 import sys input = sys.stdin.readline n, m = map(int, input().split()) nolisten = [input().rstrip() for _ in range(n)] nosee = [input().rstrip() for _ in range(m)] cnt = 0 dic = {} for person in nolisten: if person in nosee: cnt += 1 dic[per..

백준 10816번(silver 4) : 숫자 카드 2 - 딕셔너리

10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,0 www.acmicpc.net 내가 작성한 코드 - 풀이 참고ㅠ import sys input = sys.stdin.readline n = int(input()) card = list(map(int, input().split())) m = int(input()) check = list(map(int, input().split())) dic = dict() # 각 숫자 카드를 몇 개 보유하는지 저장할 딕셔너리 생성 # 기본 값 1장 그런데 이미 있다면 1 더해..

백준 7785번(silver 5) : 회사에 있는 사람(딕셔너리)

7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net 내가 작성한 코드 import sys input = sys.stdin.readline n = int(input()) log = {} for _ in range(n): employee, state = input().split() if state == 'enter': log[employee] = True else: del log[employee] result = sorted(log, reverse=True) for i in r..

백준 14425번(silver 4) : 문자열 집합 - 딕셔너리

14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net 내가 작성한 코드 - 리스트 import sys input = sys.stdin.readline n, m = map(int, input().split()) s = [ input().rstrip() for _ in range(n) ] check = [ input().rstrip() for _ in range(m) ] cnt = 0 for i in range(m): if check[i] in s: cnt += 1 print(cnt) 내..

백준 10815번(silver 5) : 숫자 카드 (딕셔너리, 이진탐색)

https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 내가 작성한 코드 - 시간초과 import sys input = sys.stdin.readline # 상근이가 갖고 있는 카드의 개수와 카드에 적힌 숫자 n = int(input()) cards = list(map(int, input().split())) # 비교군 카드 m = int(input()) compare = list(map(int, input().split..

백준 18870번(silver 2) : 좌표 압축 - 딕셔너리 컴프리헨션

18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에 www.acmicpc.net 내가 작성한 정답 - 시간초과 import sys n = int(input()) co = list(map(int, sys.stdin.readline().split())) sortedco = sorted(co) li=[[sortedco[0], 0]] compressed_num = 0 for i in range(1, n): if sortedco[i] != sortedco[i-1]: compressed_num = i ..