[백준] 1764, 2164 - Python3

shsh·2021년 10월 6일
0

백준

목록 보기
12/45

2164. 카드2

https://www.acmicpc.net/problem/2164

내 풀이 - 성공

from sys import stdin
from collections import deque

N = int(stdin.readline())

nums = deque([i for i in range(1, N+1)])
flag = 0
while len(nums) > 1:
    n = nums.popleft()
    if flag:
        nums.append(n)
        flag = 0
    else:
        flag = 1
print(nums[0])

처음에 좀 어렵게 생각해서 규칙을 찾으려 했는데 실패하고...^^
그냥 deque 사용해서 문제 고대로 풀었더니 통과했다

1 ~ N 까지의 숫자들을 nums 에 모두 저장하고
nums 에 1 개의 숫자만 남을 때까지 버리기 & 맨밑으로 반복

flag 가 0 이면 버리고
flag 가 1 이면 맨 밑으로 => append(n)

deque 를 사용해야 하는 이유
pop(0) : O(n)
popleft() : O(1)

카드2 의 규칙
=> {N - (N 미만의 가장 큰 2 의 제곱)} * 2
ex)
3 : (3 - 2) * 2 = 2 => 3 미만의 가장 큰 2 의 제곱 == 2
4 : (4 - 2) * 2 = 4 => 4 미만의 가장 큰 2 의 제곱 == 2
5 : (5 - 4) * 2 = 2 => 5 미만의 가장 큰 2 의 제곱 == 4


1764. 듣보잡

https://www.acmicpc.net/problem/1764

내 풀이 - 성공

from sys import stdin

N, M = map(int, stdin.readline().split())

names = set()
ans = []

for _ in range(N):
    p = stdin.readline().strip()
    names.add(p)

for _ in range(M):
    p = stdin.readline().strip()
    if p in names:
        ans.append(p)

ans.sort()

print(len(ans))
for p in ans:
    print(p)

듣도 못한 사람은 names 에 저장하고
보도 못한 사람은 입력받을 때마다 names 에 있는지 확인해서 ans 에 저장

사전순으로 정렬하기 위해 sort() 후, 전체 인원과 리스트 print

아니면 set() 의 교집합 연산 이용해서 풀어도 될 듯

profile
Hello, World!

0개의 댓글