Learn to share,Share to learn

1764 집합 응용, get, isdigit 사용법 본문

알고리즘

1764 집합 응용, get, isdigit 사용법

Rogue One 2024. 1. 18. 17:50

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

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

 

문제

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.

출력

듣보잡의 수와 그 명단을 사전순으로 출력한다.

 

 

내 첫 코드

N,M = map(int,input().split())
never_heard = set(input() for _ in range(N))
never_seen = set(input() for _ in range(M))

never_people = []

for people in never_heard:
  if people in never_seen:
    never_people.append(people)

never_people.sort()

print(len(never_people))
for i in range(len(never_people)):
  print(never_people[i])

 

수정된 코드

N, M = map(int, input().split())
never_heard = {input() for _ in range(N)}
never_seen = {input() for _ in range(M)}

# 듣도 보도 못한 사람들의 명단 찾기
never_people = sorted(list(never_heard & never_seen))

# 듣보잡의 수 출력
print(len(never_people))

# 듣보잡의 명단 출력
for name in never_people:
    print(name)

우선 집합으로 받는 부분을 잘못 작성했었다.

 

한줄로 입력받는 경우

set(map(int, input().split()))

 

여러줄에 걸쳐 입력받는 경우

{input() for _ in range(N)}

 

set는 ()안에 요소들이 들어가는걸로 착각했었는데, {}안에 들어간다.

 

딕셔너리도 {}를 통해 나타내는데, 키, 밸류가 있어야하고, () 안에 있는것은 튜플, [] 안에있는것이 리스트다.

 

 

 

N = int(input())
cards = list(map(int, input().split()))
M = int(input())
numbers_to_check = list(map(int, input().split()))

card_count = {}
for card in cards:
    if card in card_count:
        card_count[card] += 1
    else:
        card_count[card] = 1

result = []
for number in numbers_to_check:
    result.append(str(card_count.get(number, 0)))

print(' '.join(result))

 

에서 보다싶이 get을 이용해서 number의 키에 해당하는 값을 찾고, 없으면 0을 주는 방법도 알아두자

if quiz.isdigit():
        print(pokemon_by_number[int(quiz)])

 

입력값을 인풋으로 받아도 이즈디짓 하나면 숫자인지 판별 가능

 

n = int(input())
log = {}

for _ in range(n):
  name,status = input().split()
  if status == "enter":
    log[name] = "enter"
  else:
    del log[name]

for name in sorted(log.keys(),reverse=True):
  print(name)