매일 백준 문제 풀어보기

저번에 하던 1일 1문제는 전역 전에 이것저것 준비하고 하다보니까 흐지부지 되었습니다.
이제는 사회로 나왔으니 다시 도전해보겠습니다.
오늘부터 이 글의 댓글로 기록을 남겨보겠습니다.

5 Likes

Solver IV
1764번: 듣보잡

Python 3(12/16)
N, M = map(int, input().split())
name, check = [input() for _ in range(N+M)], []
count = 0
name.sort()
for i in range(N+M-1):
    if name[i] == name[i+1]:
        count += 1
        check.append(name[i])
check.sort()
print(count)
for i in check:
    print(i)
1 Like

SIlver V
9417번: 최대 GCD

Python 3(12/17)
from itertools import *
import math

N = int(input())
for _ in range(N):
    nums = [*map(int, input().split())]
    result = [math.gcd(x, y) for x, y in combinations(nums, 2)]
    print(max(result))
1 Like

Silver V
11536번 줄 세우기

Python 3(12/18)
N = int(input())
names = [input() for _ in range(N)]
inc, dec = sorted(names), sorted(names, reverse=True)
if names == inc:
    print("INCREASING")
elif names == dec:
    print("DECREASING")
else:
    print("NEITHER")
1 Like

Silver V
7785번: 회사에 있는 사람

Python 3(12/19)
from sys import *

n = int(stdin.readline())
people = {}
for _ in range(n):
    log = stdin.readline().split()
    if log[1] == 'enter':
        people[log[0]] = 1
    else:
        del people[log[0]]
for i in sorted(people.keys(), reverse=True):
    print(i)
1 Like

Silver V
16212번: 정열적인 정렬

Python 3(12/20)
N = int(input())
nums = sorted([* map(int, input().split())])
print(" ".join(map(str, nums)))
1 Like

Silver V
13706번: 제곱근

Python 3(12/21)
N = int(input())
start, end = 1, N
while 1:
    mid = (start + end) // 2
    if mid**2 > N:
        end = mid
    elif mid**2 < N:
        start = mid
    else:
        break
print(mid)
1 Like

Silver V
14492번: 부울행렬의 부울곱

Python 3(12/21)
N = int(input())
A = [[*map(int, input().split())] for _ in range(N)]
B = [[*map(int, input().split())] for _ in range(N)]
count = 0
for i in range(N):
    for j in range(N):
        x = 0
        for k in range(N):
            x = x or (A[i][k] and B[k][j])
        count += x
print(count)
1 Like

Silver IV
3474번: 교수가 된 현우

Python 3(12/22)
import sys
T = int(sys.stdin.readline())
for _ in range(T):
    num = int(sys.stdin.readline())
    count = 0
    point = 5
    while point <= num:
        count += num // point
        point *= 5
    print(count)
1 Like

Silver IV
3983번: 좋은 단어

Python 3(12/22)
N = int(input())
count = 0
for _ in range(N):
    string = input()
    while 1:
        check = len(string)
        string = string.replace('AA', '').replace('BB', '')
        if check == len(string):
            break
    if len(string) == 0:
        count += 1
print(count)
1 Like

Silver IV
2847번: 게임을 만든 동준이

Python 3(12/23)
N = int(input())
score = [int(input()) for _ in range(N)][::-1]
count = 0
temp = score[0]
for i in range(1, N):
    if temp <= score[i]:
        diff = score[i] - temp + 1
        count += diff
        temp = score[i] - diff
    else:
        temp = score[i]
print(count)
1 Like

Silver IV
2217번: 로프

Python 3(12/24)
import sys
N = int(sys.stdin.readline())
rope = sorted([int(sys.stdin.readline()) for _ in range(N)])
temp = 1
for i in range(N):
    result = rope.pop() * (i+1)
    if result > temp:
        temp = result
print(temp)

이 문제를 푸는데 계속 시간 초과가 났습니다.
정렬이 문제인가 해서 병합 정렬을 써봐도 시간 초과가 나고.
알고보니 특별한거 없었습니다.
리스트의 마지막 요소를 없애는 방식으로 rope = rope[:-1]을 썼는데
이 부분을 pop으로 고치니 바로 풀렸습니다. 세상에나.

저런 방식은 오래 걸리나 보군요
메모…

Silver IV
1822번: 차집합

Python 3(12/25)
nA, nB = map(int, input().split())
A = set([*map(int, input().split())])
B = set([*map(int, input().split())])
result = sorted(list(A - B))
print(len(result))
if result:
    print(" ".join(map(str, result)))

메리크리스마스입니다.

Silver V
17176번: 암호해독기

Python 3(12/26)
N = int(input())
cryptogram = sorted([*map(int, input().split())])
plaintext = sorted([*input()])
check = []
for i in cryptogram:
    if i == 0:
        check += ' '
    elif i <= 26:
        check += chr(i+64)
    else:
        check += chr(i+70)
if plaintext == check:
    print('y')
else:
    print('n')

Silver IV
1302번: 베스트셀러

Python 3(12/26)
N = int(input())
titles = [input() for _ in range(N)]
books = {}
for i in titles:
    if i in books.keys():
        books[i] += 1
    else:
        books[i] = 1
maxvalue = max(books.values())
check = []
for i in set(titles):
    if books[i] == maxvalue:
        check.append(i)
print(sorted(check)[0])

Silver V
21966번: (중략)

Python 3(12/27)
N = int(input())
S = input()
if N <= 25:
    print(S)
else:
    if '.' in S[11:-12]:
        print(S[:9]+'......'+S[-10:])
    else:
        print(S[:11]+'...'+S[-11:])

어떻게 문제 이름이 (중략)

1 Like

Silver IV
1755번: 숫자놀이

Python 3(12/28)
english = {
    0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four',
    5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'
}
number = {v: k for k,v in english.items()}
check = []
result = []
M, N = map(int, input().split())
for i in range(M, N+1):
    num = ''
    if i > 9:
        num += english[i // 10] + ' '
    num += english[i % 10]
    check.append(num)
check.sort()
for i in check:
    eng = 0
    temp = i.split()
    if len(temp) > 1:
        eng = number[temp[0]] * 10 + number[temp[1]]
    else:
        eng = number[temp[0]]
    result.append(eng)
for i in range(0, len(result), 10):
    print(' '.join(map(str, result[i:i+10])))

어쩌다보니 장황한 코드가 되었습니다.

Silver V
20114번: 미아 노트

Python 3(12/29)
N, H, W = map(int, input().split())
string = [input() for _ in range(H)]
check = [*string[0]]
result = ''
for i in range(1, H):
    for j in range(len(check)):
        if string[i][j] != '?':
            check[j] = string[i][j]
for i in range(0, len(check), W):
    temp = ''.join(map(str, check[i:i+W])).replace('?', '')
    if temp:
        result += temp[0]
    else:
        result += '?'
print(result)