[Baekjoon] 20920 - πŸ˜£μ˜λ‹¨μ–΄ μ•”κΈ°λŠ” κ΄΄λ‘œμ›Œ

ChobbyΒ·2023λ…„ 11μ›” 23일
1

Baekjoon

λͺ©λ‘ 보기
96/108

πŸ˜€λ¬Έμ œ

ν™”μ€μ΄λŠ” 이번 μ˜μ–΄ μ‹œν—˜μ—μ„œ ν‹€λ¦° 문제λ₯Ό λ°”νƒ•μœΌλ‘œ μ˜μ–΄ 단어 μ•”κΈ°λ₯Ό ν•˜λ €κ³  ν•œλ‹€. κ·Έ κ³Όμ •μ—μ„œ 효율적으둜 μ˜μ–΄ 단어λ₯Ό μ™Έμš°κΈ° μœ„ν•΄ μ˜μ–΄ 단어μž₯을 λ§Œλ“€λ € ν•˜κ³  μžˆλ‹€. 화은이가 λ§Œλ“€κ³ μž ν•˜λŠ” 단어μž₯의 단어 μˆœμ„œλŠ” λ‹€μŒκ³Ό 같은 μš°μ„ μˆœμœ„λ₯Ό μ°¨λ‘€λ‘œ μ μš©ν•˜μ—¬ λ§Œλ“€μ–΄μ§„λ‹€.

자주 λ‚˜μ˜€λŠ” λ‹¨μ–΄μΌμˆ˜λ‘ μ•žμ— λ°°μΉ˜ν•œλ‹€.
ν•΄λ‹Ή λ‹¨μ–΄μ˜ 길이가 길수둝 μ•žμ— λ°°μΉ˜ν•œλ‹€.
μ•ŒνŒŒλ²³ 사전 순으둜 μ•žμ— μžˆλŠ” λ‹¨μ–΄μΌμˆ˜λ‘ μ•žμ— λ°°μΉ˜ν•œλ‹€

MM보닀 짧은 길이의 λ‹¨μ–΄μ˜ 경우 μ½λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ μ™ΈμšΈ 수 있기 λ•Œλ¬Έμ— 길이가
MM이상인 λ‹¨μ–΄λ“€λ§Œ μ™Έμš΄λ‹€κ³  ν•œλ‹€. 화은이가 괴둜운 μ˜λ‹¨μ–΄ μ•”κΈ°λ₯Ό 효율적으둜 ν•  수 μžˆλ„λ‘ 단어μž₯을 λ§Œλ“€μ–΄ 주자.


πŸ˜μž…λ ₯

첫째 μ€„μ—λŠ” μ˜μ–΄ 지문에 λ‚˜μ˜€λŠ” λ‹¨μ–΄μ˜ 개수
NNκ³Ό μ™ΈμšΈ λ‹¨μ–΄μ˜ 길이 기쀀이 λ˜λŠ”
MM이 곡백으둜 κ΅¬λΆ„λ˜μ–΄ 주어진닀. (
1≀N≀100 0001 \leq N \leq 100\,000,
1≀M≀101 \leq M \leq 10)

λ‘˜μ§Έ 쀄뢀터
N+1N+1번째 μ€„κΉŒμ§€ μ™ΈμšΈ 단어λ₯Ό μž…λ ₯λ°›λŠ”λ‹€. μ΄λ•Œμ˜ μž…λ ₯은 μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œλ§Œ 주어지며 λ‹¨μ–΄μ˜ κΈΈμ΄λŠ”
1010을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

단어μž₯에 단어가 λ°˜λ“œμ‹œ 1개 이상 μ‘΄μž¬ν•˜λŠ” μž…λ ₯만 주어진닀.


πŸ˜‚μΆœλ ₯

ν™”μ€μ΄μ˜ 단어μž₯에 λ“€μ–΄ μžˆλŠ” 단어λ₯Ό 단어μž₯의 μ•žμ— μœ„μΉ˜ν•œ 단어뢀터 ν•œ 쀄에 ν•œ 단어씩 μˆœμ„œλŒ€λ‘œ 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯ 1 
7 4
apple
ant
sand
apple
append
sand
sand
예제 좜λ ₯ 1 
sand
apple
append
예제 μž…λ ₯ 2 
12 5
appearance
append
attendance
swim
swift
swift
swift
mouse
wallet
mouse
ice
age
예제 좜λ ₯ 2 
swift
mouse
appearance
attendance
append
wallet

πŸ€£λ…ΈνŠΈ

λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•˜λ©΄ μž…μΆœλ ₯을 μ’€ 더 λΉ λ₯΄κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

C++을 μ‚¬μš©ν•˜κ³  있고 cin/cout을 μ‚¬μš©ν•˜κ³ μž ν•œλ‹€λ©΄, cin.tie(NULL)κ³Ό sync_with_stdio(false)λ₯Ό λ‘˜ λ‹€ μ μš©ν•΄ μ£Όκ³ , endl λŒ€μ‹  κ°œν–‰λ¬Έμž(\n)λ₯Ό μ“°μž. 단, μ΄λ ‡κ²Œ ν•˜λ©΄ 더 이상 scanf/printf/puts/getchar/putchar λ“± C의 μž…μΆœλ ₯ 방식을 μ‚¬μš©ν•˜λ©΄ μ•ˆ λœλ‹€.
Javaλ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄, Scanner와 System.out.println λŒ€μ‹  BufferedReader와 BufferedWriterλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. BufferedWriter.flushλŠ” 맨 λ§ˆμ§€λ§‰μ— ν•œ 번만 ν•˜λ©΄ λœλ‹€.
Python을 μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄, input λŒ€μ‹  sys.stdin.readline을 μ‚¬μš©ν•  수 μžˆλ‹€. 단, μ΄λ•ŒλŠ” 맨 끝의 κ°œν–‰λ¬ΈμžκΉŒμ§€ 같이 μž…λ ₯λ°›κΈ° λ•Œλ¬Έμ— λ¬Έμžμ—΄μ„ μ €μž₯ν•˜κ³  싢을 경우 .rstrip()을 μΆ”κ°€λ‘œ ν•΄ μ£ΌλŠ” 것이 μ’‹λ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ, Pypy3은 Python 3와 같은 문법을 κ°€μ§€λ©΄μ„œ 일반적으둜 더 λΉ λ₯΄κ²Œ λ™μž‘ν•œλ‹€. μ—°μ‚°λŸ‰μ΄ λ§Žμ€ λ¬Έμ œμ—μ„œ Python을 μ‚¬μš©ν•˜κ³ μž ν•œλ‹€λ©΄ Pypy둜 μ œμΆœν•˜λŠ” 것을 ꢌμž₯ν•œλ‹€.


πŸ˜ƒμΆœμ²˜

  • Camp > ICPC Sinchon Algorithm Camp > 2021 ICPC Sinchon Winter Algorithm Camp Contest > μ΄ˆκΈ‰ A번
  • 문제λ₯Ό κ²€μˆ˜ν•œ μ‚¬λžŒ: gratus907, iknoom1107, jwvg0425, tony9402
  • 문제λ₯Ό λ§Œλ“  μ‚¬λžŒ: whaeun25

πŸ˜„μ•Œκ³ λ¦¬μ¦˜ λΆ„λ₯˜

  • 자료 ꡬ쑰
  • λ¬Έμžμ—΄
  • μ •λ ¬
  • ν•΄μ‹œλ₯Ό μ‚¬μš©ν•œ 집합과 맡
  • 트리λ₯Ό μ‚¬μš©ν•œ 집합과 맡

πŸ˜Žλ‚˜μ˜ν’€μ΄

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split("\n")
const [N, M] = input[0].split(" ").map(Number)
const wordDict = {}
const wordLengthFilter = input.filter((a, i) => {
    if(i === 0) return false
    if(a.length < M) return false
    wordDict[a] = wordDict[a] ?? 0
    wordDict[a] += 1
    return true
})
const nonDuplicatedWord = [...new Set(wordLengthFilter)]
const sortedWord = nonDuplicatedWord.sort((a, b) => {
    const [countA, countB] = [wordDict[a], wordDict[b]]
    if(countA !== countB) return countB-countA
    if(a.length !== b.length) return b.length-a.length
    if(a > b) return 1
    if(a === b) return 0
    return -1
})
    
console.log(sortedWord.join("\n"))
profile
λ‚΄ 지식을 κ³΅μœ ν•  수 μžˆλŠ” λŒ€λ‹΄ν•¨

0개의 λŒ“κΈ€