λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/BOJ

[BOJ] μˆ˜κ°•μ‹ μ²­ (#13414)

 

 

문제 

 

κ΅­λ―ΌλŒ€ν•™κ΅μ—μ„œλŠ” 맀 ν•™κΈ° μ‹œμž‘ μ „ μ’…ν•©μ •λ³΄μ‹œμŠ€ν…œμ—μ„œ μˆ˜κ°•μ‹ μ²­μ„ ν•œλ‹€. 맀 μˆ˜κ°•μ‹ μ²­λ§ˆλ‹€ μ•„μ£Ό λ§Žμ€ 학생듀이 λͺ°λ € μ„œλ²„μ— λ§Žμ€ λΆ€ν•˜κ°€ κ°€κΈ° λ•Œλ¬Έμ—, κ΅­λ―ΌλŒ€ν•™κ΅μ—μ„œλŠ” μˆ˜κ°•μ‹ μ²­ λΆ€ν•˜ 관리 μ‹œμŠ€ν…œμ„ λ„μž…ν•˜κΈ°λ‘œ κ²°μ •ν•˜μ˜€λ‹€. μƒˆλ‘œμš΄ 관리 μ‹œμŠ€ν…œμ€ λ‹€μŒκ³Ό 같은 λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.

  1. μˆ˜κ°•μ‹ μ²­ λ²„νŠΌμ΄ ν™œμ„±ν™” 된 ν›„, μˆ˜κ°•μ‹ μ²­ λ²„νŠΌμ„ μ‘°κΈˆμ΄λΌλ„ 빨리 λˆ„λ₯Έ 학생이 λŒ€κΈ°λͺ©λ‘μ— λ¨Όμ € λ“€μ–΄κ°„λ‹€.
  2. 이미 λŒ€κΈ°μ—΄μ— λ“€μ–΄κ°€ μžˆλŠ” μƒνƒœμ—μ„œ λ‹€μ‹œ μˆ˜κ°•μ‹ μ²­ λ²„νŠΌμ„ λˆ„λ₯Ό 경우 λŒ€κΈ°λͺ©λ‘μ˜ 맨 λ’€λ‘œ λ°€λ €λ‚œλ‹€.
  3. μž μ‹œ ν›„ μˆ˜κ°•μ‹ μ²­ λ²„νŠΌμ΄ λΉ„ν™œμ„±ν™” 되면, λŒ€κΈ°λͺ©λ‘μ—μ„œ κ°€μž₯ μ•žμ— μžˆλŠ” 학생뢀터 μžλ™μœΌλ‘œ μˆ˜κ°•μ‹ μ²­μ΄ μ™„λ£Œλ˜λ©°, μˆ˜κ°• κ°€λŠ₯ 인원이 꽉 μ°° 경우 λ‚˜λ¨Έμ§€ λŒ€κΈ°λͺ©λ‘μ€ λ¬΄μ‹œν•˜κ³  μˆ˜κ°•μ‹ μ²­μ„ μ’…λ£Œν•œλ‹€.

μœ„μ˜ ν‘œλŠ” μ΅œλŒ€ μˆ˜κ°• κ°€λŠ₯ 인원이 3λͺ…인 μ•Œκ³ λ¦¬μ¦˜ μˆ˜μ—…μ— λŒ€ν•΄ 6λͺ…μ˜ 학생이 μˆ˜κ°•μ‹ μ²­μ„ μ§„ν–‰ν•œ λͺ¨μŠ΅μ΄λ‹€. λ²„νŠΌμ΄ λΉ„ν™œμ„±ν™” 된 ν›„, λ¨Όμ € κ·œμΉ™ 1을 μ μš©ν•˜μ—¬ 클릭을 2번 이상 ν•œ ν•™μƒμ˜ μ€‘λ³΅λœ λŒ€κΈ°λͺ©λ‘μ„ μ‚­μ œν•œλ‹€. μ€‘λ³΅λœ λͺ©λ‘μ„ μ œκ±°ν•œ ν›„, 맨 μ•žμ—μ„œλΆ€ν„° μ΅œλŒ€ μˆ˜κ°• κ°€λŠ₯ 인원인 3λͺ…을 μ„ μ •ν•œλ‹€. ν‘œμ˜ 맨 였λ₯Έμͺ½μ—λŠ” κ·Έ μ΅œμ’…κ²°κ³Όλ₯Ό λ‚˜νƒ€λ‚Έ λͺ¨μŠ΅μ΄λ‹€. 이와 같은 방법을 μ΄μš©ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ μˆ˜κ°•μ‹ μ²­μ— μ„±κ³΅ν•œ 인원을 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

 

λ‚˜μ˜ μ½”λ“œ 
import sys

std, t = map(int,sys.stdin.readline().strip().split())
arr = [sys.stdin.readline().strip() for _ in range(t)]
step1 = []
step2 = []

# step1. λ‘λ²ˆ 이상 λ²„νŠΌ λˆ„λ₯Έ μ‚¬λžŒ λ°°μ—΄ 맨 λ’€λ‘œ 보내기 
arr = arr[::-1]
for i in arr:
  step1.append(i)
  if i in step1[:len(step1)-1]:
    step1.pop()
step1 = step1[::-1]
  
# step2. μˆ˜κ°•μΈμ›μ— 맞좰 μˆ˜κ°•μƒ 뽑기
# 1. μˆ˜κ°•μΈμ›λ³΄λ‹€ μˆ˜κ°•μƒμ΄ λ§Žκ±°λ‚˜ 같을 경우 
if len(step1) >= std:
  answer = step1[0:std]
# 2. μˆ˜κ°•μΈμ›λ³΄λ‹€ μˆ˜κ°•μƒμ΄ 적은 경우 
if len(step1) < std:
  answer = step1

for k in answer:
  print(k)
뢄석 > 문제λ₯Ό 보고 리슀트λ₯Ό μ΄μš©ν•΄ κ΅¬ν˜„ν–ˆμ§€λ§Œ, μ‹œκ°„μ΄ˆκ³Όκ°€ λ–΄λ‹€. 이 λ¬Έμ œλŠ” 리슀트λ₯Ό μ‚¬μš©ν•˜λ©΄ μ•ˆλ˜μ—ˆλ‹€. 

 

 

ν•΄μ„€ μ½”λ“œ 
import sys

input = sys.stdin.readline

K, L = map(int, input().split())

queue_list = {}

for i in range(L):
    studentId = input().rstrip()
    queue_list[studentId] = i

cnt = 0
for x in sorted(queue_list.items(), key=lambda x: x[1]):
    cnt += 1
    if cnt > K:
        break
    print(x[0])
뢄석 > ν•΄μ‹œλ§΅μ„ μ‚¬μš©ν•˜μ—¬ 쀑볡을 μ œκ±°ν•΄μ£Όμ—ˆλ‹€. 정말 경이둜운 방법이닀. 정렬을 ν•  λ•ŒλŠ” x[1]을 κΈ°μ€€μœΌλ‘œ ν•΄μ„œ μˆ«μžκ°€ μž‘μ€ μˆœμ„œλŒ€λ‘œ 정렬을 ν•˜κ³  μ œν•œλœ μˆ˜κ°•μΈμ› μˆ˜λŒ€λ‘œ printλ₯Ό ν•΄μ£Όλ©΄ λ˜μ—ˆλ‹€. 

 

ν•΄μ‹œ 
dict = {}
arr = ['apple','apple','blueberry']

for i in range(len(arr)):
  dict[arr[i]] = i
print(dict) # {'apple': 1, 'blueberry': 2}

 

 

 

 

13414번: μˆ˜κ°•μ‹ μ²­

μž…λ ₯ λ°μ΄ν„°λŠ” ν‘œμ€€ μž…λ ₯을 μ‚¬μš©ν•œλ‹€. μž…λ ₯은 1개의 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λ‘œ κ΅¬μ„±λœλ‹€. μž…λ ₯의 첫 번째 μ€„μ—λŠ” κ³Όλͺ©μ˜ μˆ˜κ°• κ°€λŠ₯ 인원 K(1 ≤ K ≤ 100,000)와 학생듀이 λ²„νŠΌμ„ ν΄λ¦­ν•œ μˆœμ„œλ₯Ό κΈ°λ‘ν•œ λŒ€κΈ°λͺ©

www.acmicpc.net

 

'Algorithm > BOJ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] 곡톡 λΆ€λΆ„ λ¬Έμžμ—΄  (0) 2022.05.13
[BOJ] μΆ”μ›” (#2002)  (0) 2022.05.03
[BOJ] λ§ˆμΈν¬λž˜ν”„νŠΈ (#18111)  (0) 2022.04.22
[BOJ] νƒ€λ…ΈμŠ€ (#20310)  (0) 2022.04.22
[BOJ] 곡 (#1547)  (0) 2022.04.15