알고리즘

    [백준 파이썬] # 15829 Hashing

    Bronze II # 15829 Hashing 링크 : https://www.acmicpc.net/problem/15829 15829번: Hashing APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정 www.acmicpc.net 풀이 dic = {'a':1,'b':2,'c':3,'d':4,'e':5, 'f':6,'g':7,'h':8,'i':9,'j':10, 'k':11,'l':12,'m':13,'n':14,'o':15, 'p':16,'q':17,'r':18,'s':19,'t':20, 'u':21,'v':22,'w':23,'x':24,'y':25, 'z':26} r ..

    [백준 파이썬] # 4949 균형잡힌 세상

    Silver IV # 4949 균형잡힌 세상 링크 : https://www.acmicpc.net/problem/4949 4949번: 균형잡힌 세상 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마 www.acmicpc.net 풀이 while True: text = input() # 반복문 탈출 조건 설정 if text == '.': break s = [0] # s[-1]을 이용할 때 에러 방지를 위해 s = [] 대신 사용 for i in text: if i == '(': s.append('small') elif i == ')': if s[-1] ==..

    [백준 파이썬] # 9012 괄호

    Silver IV # 9012 괄호 링크 : https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 풀이 T = int(input()) for i in range(T): text = input() cnt = 0 for i in text: if i == '(': cnt += 1 else: cnt -= 1 if cnt 0: print('NO') elif cnt == 0..

    [백준 파이썬] # 9375 패션왕 신해빈

    Silver III # 9375 패션왕 신해빈 링크 : https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 풀이 T = int(input()) for i in range(T): n = int(input()) cloth = {} for j in range(n): name, kinds = input().split() if kinds in cloth: cloth..

    [백준 파이썬] # 11723 집합

    Silver IV # 11723 집합 링크 : https://www.acmicpc.net/problem/11723 17219번: 비밀번호 찾기 첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번 www.acmicpc.net 풀이 import sys M = int(sys.stdin.readline()) S = [0] * 21 for i in range(M): order = sys.stdin.readline().split() if order[0] == 'add': if S[int(order[1])] == 0: S[int(order[1])] = ..

    [백준 파이썬] # 1764 듣보잡

    Silver IV # 1764 듣보잡 링크 : https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 풀이 N, M = map(int, input().split()) dic = {} for i in range(N+M): name = input() if name in dic: dic[name] += 1 else: dic[name] = 1 li = [] for key, value in dic.items(): if v >= 2: li.append(key)..

    [백준 파이썬] # 1676 팩토리얼 0의 개수

    Silver IV # 1676 팩토리얼 0의 개수 링크 : https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이 import math N = int(input()) cnt = 0 f = math.factorial(N) for i in reversed(str(f)): if i == '0': cnt += 1 else: break print(cnt) 후기 math 모듈을 사용해서 팩토리얼을 구현할 수 있다. ex) math.factorial(N) = N! numpy, pandas는 코딩 테스트에서 사용할 수 없게끔 한다고 한다. 그러나..

    [백준 파이썬] # 11050 이항 계수 1

    Bronze I # 11050 이항 계수 1 링크 : https://www.acmicpc.net/problem/11050 11050번: 이항 계수 1 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 풀이 import math N, K = map(int, input().split()) print(math.factorial(N) // (math.factorial(K)*math.factorial(N-K))) 후기 math 모듈을 사용해서 팩토리얼을 구현할 수 있다.

    [백준 파이썬] #1193 분수찾기

    Bronze I # 1193 분수찾기 링크 : https://www.acmicpc.net/problem/1193 1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 풀이 X = int(input()) line = 1 while X > line: X -= line line += 1 if line%2 == 0: a = X b = line-X+1 else: a = line-X+1 b = X print(a, '/', b, sep = '') 후기 Bronze I인데 내게 너무 어려운 문제로 느껴졌다. 문제 이해를 금방 했어도 구현을 너무 어려운 방식으로 시도하는 것 같아 고칠 필요가 있다. 기준을 무엇으로 설정하는지가 중요해보인다. 분자 / 분모 / 분..

    [백준 파이썬] # 1654 랜선 자르기

    Silver III # 1654 랜선 자르기 링크 : https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 풀이 K, N = map(int, input().split()) lan = [int(input()) for i in range(K)] def bs(arr, target): start = 1 # zerodivisionerror 방지, 0 → 1 end = max(lan) while start = target: star..