본문 바로가기

코딩테스트

(55)
[백준/파이썬] 2108번: 통계학 (Python) 문제 www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 풀이 - 구현 - 최빈값의 경우 딕셔너리를 이용해 각 숫자를 key값에, 해당 숫자의 빈도수를 value값에 담았다 value값이 가장 큰 값의 key들을 배열에 담아 풀었다. - 시간초과는 sys.stdin.readline()을 통해 해결했다 코드 import sys n = int(input()) arr = [] diction = {} for _ in range(n): i = int(sys.stdin.readline(..
[백준/파이썬] 2960번: 에라토스테네스의 체 (Python) 문제 www.acmicpc.net/problem/2960 2960번: 에라토스테네스의 체 2, 4, 6, 8, 10, 3, 9, 5, 7 순서대로 지워진다. 7번째 지워진 수는 9이다. www.acmicpc.net 풀이 - 구현 - 에라토스테네스의 체 - 위키백과 코드 n, k = map(int, input().split()) sieve = [True] * (n+1) # 에라토스테네스의 체 초기화 cnt = 0 for i in range(2, n+2): for j in range(i, n+1, i): if sieve[j] == True: sieve[j] = False cnt += 1 if cnt == k: print(j) break
[백준/파이썬] 10773번: 제로 문제 www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 풀이 - 구현 - 리스트의 append()와 pop()이용 [1] append [1,3] append [1,3,5] append [1,3,5,4] append [1,3,5] (0을 불렀기 때문에 최근의 수를 지운다) pop [1,3] (0을 불렀기 때문에 그 다음 최근의 수를 지운다) pop [1,3,7] append [1,3] (0을 불렀기 때문에 최근의 수를 지운다) ..
[백준/파이썬] 2941번: 크로아티아 알파벳 (Python) 문제 www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 풀이 - 구현 - 단어를 리스트로 입력받고, join함수를 이용해 문자열을 비교한다 코드 n = list(map(str, input())) croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] # 크로아티아 알파벳 i, cnt = 0, 0 while True: if ''.join(n[i:i+2]) in croatia..
[백준/파이썬] 4673번: 셀프 넘버 (Python) 문제 www.acmicpc.net/problem/4673 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 풀이 - 구현 - 1부터 10000까지 리스트에 담고, n과 n의 각 자리수의 합이 10000보다 작고, 리스트 안에 존재하는 숫자라면 리스트에서 제외시켜준다. 해당 리스트에는 셀프넘버만 존재하게 된다 코드 arr = [ i for i in range(1,10001)] # 1부터 10000까지 list에 담기 for i in range(1,10001): n..
[백준/파이썬] 1152번: 단어의 개수 (Python) 문제 www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 www.acmicpc.net 풀이 - 구현, 문자열 - input().split()하면 빈칸을 기준으로 리스트 형식으로 담긴다 코드 n = len(input().split()) print(n)
[백준/파이썬] 1316번: 그룹 단어 체커 (Python) 문제 www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 풀이 - 구현 알고리즘 - 문자열의 각 문자를 새로운 리스트에 존재하지 않는 경우 리스트에 담는다. - 새로운 리스트에 단어가 존재하고 해당 단어가 연속하지 않은 경우는 그룹단어가 아니다. 예를들어, happy는 ['h', 'a', 'p', 'y']가 새로운 리스트에 담긴다. 단 'p'는 연속되어있기 때문에 그룹단어이다 코드 n = int(input()) a = [] cnt..
[백준/파이썬] 1145번: 적어도 대부분의 배수 (Python) 문제 www.acmicpc.net/problem/1145 1145번: 적어도 대부분의 배수 첫째 줄에 다섯 개의 자연수가 주어진다. 100보다 작거나 같은 자연수이고, 서로 다른 수이다. www.acmicpc.net 풀이 - 브루트포스 알고리즘 - 처음 무슨 문제인지 이해를 못했다. 주어진 다섯 개의 자연수 중 최소 3개로 나누어 떨어지는 숫자 중 최소값을 구하는 문제이다. - 210은 30의 배수, 42의 배수, 70의 배수이다. - 1부터 시작 할 필요없이 5개의 숫자중에서 가장 작은 숫자부터 1씩 증가시켜, 주어진 다섯 개의 수로 나누어 떨어지면 cnt를 증가시켜준다 - cnt가 3이상이되면 해당 숫자가 정답이 된다. 코드 arr = list(map(int, input().split())) minN..