πŸ“š Study/Baekjoon

[Silver I] 1283 - 단좕킀 μ§€μ •

윰갱 2025. 5. 1. 12:32

문제

ν•œκΈ€ ν”„λ‘œκ·Έλž¨μ˜ λ©”λ‰΄μ—λŠ” 총 N개의 μ˜΅μ…˜μ΄ μžˆλ‹€. 각 μ˜΅μ…˜λ“€μ€ ν•œ 개 λ˜λŠ” μ—¬λŸ¬ 개의 λ‹¨μ–΄λ‘œ μ˜΅μ…˜μ˜ κΈ°λŠ₯을 μ„€λͺ…ν•˜μ—¬ λ†“μ•˜λ‹€. 그리고 μš°λ¦¬λŠ” μœ„μ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ 각 μ˜΅μ…˜μ— 단좕킀λ₯Ό μ˜λ―Έν•˜λŠ” λŒ€ν‘œ μ•ŒνŒŒλ²³μ„ μ§€μ •ν•˜κΈ°λ‘œ ν•˜μ˜€λ‹€. 단좕킀λ₯Ό μ§€μ •ν•˜λŠ” 법은 μ•„λž˜μ˜ μˆœμ„œλ₯Ό λ”°λ₯Έλ‹€.

  1. λ¨Όμ € ν•˜λ‚˜μ˜ μ˜΅μ…˜μ— λŒ€ν•΄ μ™Όμͺ½μ—μ„œλΆ€ν„° 였λ₯Έμͺ½ μˆœμ„œλ‘œ λ‹¨μ–΄μ˜ 첫 κΈ€μžκ°€ 이미 λ‹¨μΆ•ν‚€λ‘œ μ§€μ •λ˜μ—ˆλŠ”μ§€ μ‚΄νŽ΄λ³Έλ‹€. λ§Œμ•½ λ‹¨μΆ•ν‚€λ‘œ 아직 지정이 μ•ˆ λ˜μ–΄μžˆλ‹€λ©΄ κ·Έ μ•ŒνŒŒλ²³μ„ λ‹¨μΆ•ν‚€λ‘œ μ§€μ •ν•œλ‹€.
  2. λ§Œμ•½ λͺ¨λ“  λ‹¨μ–΄μ˜ 첫 κΈ€μžκ°€ 이미 지정이 λ˜μ–΄μžˆλ‹€λ©΄ μ™Όμͺ½μ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ μ•ŒνŒŒλ²³μ„ λ³΄λ©΄μ„œ λ‹¨μΆ•ν‚€λ‘œ μ§€μ • μ•ˆ 된 것이 μžˆλ‹€λ©΄ λ‹¨μΆ•ν‚€λ‘œ μ§€μ •ν•œλ‹€.
  3. μ–΄λ– ν•œ 것도 λ‹¨μΆ•ν‚€λ‘œ μ§€μ •ν•  수 μ—†λ‹€λ©΄ κ·Έλƒ₯ 놔두며 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„μΉ˜ μ•ŠλŠ”λ‹€.
  4. μœ„μ˜ κ·œμΉ™μ„ 첫 번째 μ˜΅μ…˜λΆ€ν„° N번째 μ˜΅μ…˜κΉŒμ§€ μ°¨λ‘€λŒ€λ‘œ μ μš©ν•œλ‹€.

μž…λ ₯

첫째 쀄에 μ˜΅μ…˜μ˜ 개수 N(1 ≤ N ≤ 30)이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ 쀄뢀터 N+1번째 μ€„κΉŒμ§€ 각 쀄에 μ˜΅μ…˜μ„ λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄μ΄ μž…λ ₯λ˜λŠ”λ° ν•˜λ‚˜μ˜ μ˜΅μ…˜μ€ 5개 μ΄ν•˜μ˜ λ‹¨μ–΄λ‘œ ν‘œν˜„λ˜λ©°, 각 단어 μ—­μ‹œ 10개 μ΄ν•˜μ˜ μ•ŒνŒŒλ²³μœΌλ‘œ ν‘œν˜„λœλ‹€. λ‹¨μ–΄λŠ” 곡백 ν•œ 칸으둜 κ΅¬λΆ„λ˜μ–΄μ Έ μžˆλ‹€.

좜λ ₯

N개의 쀄에 각 μ˜΅μ…˜μ„ 좜λ ₯ν•˜λŠ”λ° λ‹¨μΆ•ν‚€λ‘œ μ§€μ •λœ μ•ŒνŒŒλ²³μ€ μ’Œμš°μ— [] κ΄„ν˜Έλ₯Ό μ”Œμ›Œμ„œ ν‘œν˜„ν•œλ‹€.

예제 μž…λ ₯ 1 λ³΅μ‚¬

5
New
Open
Save
Save As
Save All

예제 좜λ ₯ 1 λ³΅μ‚¬

[N]ew
[O]pen
[S]ave
Save [A]s
Sa[v]e All

예제 μž…λ ₯ 2 λ³΅μ‚¬

8
New window
New file
Copy
Undo
Format
Font
Cut
Paste

예제 좜λ ₯ 2 λ³΅μ‚¬

[N]ew window
New [f]ile
[C]opy
[U]ndo
F[o]rmat
Fon[t]
Cut
[P]aste

# 풀이 방법

μƒˆλ‘œμš΄ 아이디어λ₯Ό λ– μ˜¬λ¦΄ 건 μ—†μ—ˆκ³  κ·Έλƒ₯ ν•˜λ‚˜μ”© κ΅¬ν˜„ν•˜λ©΄ λ˜λŠ” 문제

flag둜 t/f 이런거 μ„€μ •ν•˜λŠ”κ²Œ 살짝 ν—·κ°ˆλ ΈμŒ

input_list 자체λ₯Ό λ°”κΏ€ 생각을 μ‹€μ œλ‘œλŠ” λͺ»ν•˜κ³  μƒˆ 리슀트λ₯Ό μž…λ ₯ λ°›μ„κΉŒ ν–ˆμ—ˆλŠ”λ° λ‚¨μ˜ μ½”λ“œλ₯Ό μ°Έκ³ ν–ˆλ‹€.


# μ½”λ“œ1 - good

μ½”λ“œ2둜 처음 ν†΅κ³Όν–ˆμ§€λ§Œ, enumerate ν•¨μˆ˜μ— μ΅μˆ™ν•΄μ§„ μ΄ν›„λ‘œλŠ” 더 λ‚˜μ•„μ§„ 풀이λ₯Ό κ΅¬ν˜„ν•  수 μžˆμ—ˆλ‹€.

사싀은 λ‹¨μ–΄λ³„λ‘œ μ €μž₯ν•˜λŠ”κ²Œ 더 말이 λ˜λ‹ˆκΉŒ (sys.stdin.readline.split())

# 2025-05-02 14:44-15:13
import sys
sys.stdin = open("input.txt","r")

n = int(sys.stdin.readline().strip())
input_list = [list(sys.stdin.readline().split()) for _ in range(n)]
key_list = []

def return_key(words):
    #  μ™Όμͺ½μ—μ„œλΆ€ν„° 였λ₯Έμͺ½ μˆœμ„œλ‘œ λ‹¨μ–΄μ˜ 첫 κΈ€μžκ°€ 이미 λ‹¨μΆ•ν‚€λ‘œ μ§€μ •λ˜μ—ˆλŠ”μ§€
    for (i,word) in enumerate(words):
        if word[0].upper() not in key_list:
            key_list.append(word[0].upper())
            word = '[' + word[0] + ']' + word[1:]
            words[i] = word
            return

    # μ–΄λ– ν•œ 것도 λ‹¨μΆ•ν‚€λ‘œ μ§€μ •ν•  수 μ—†λ‹€λ©΄ κ·Έλƒ₯ 놔두며 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„μΉ˜ μ•ŠλŠ”λ‹€.
    for (i, word) in enumerate(words):
        for (j, w) in enumerate(word):
            if w.upper() not in key_list:
                key_list.append(w.upper())
                word = word[:j] + '[' + word[j] + ']' + word[j+1:]
                words[i] = word
                return

for i in range(n):
    return_key(input_list[i])
    print(*input_list[i],sep=' ')

 

 

# μ½”λ“œ2 -- μ°Έκ³ 

μ²˜μŒμ—λŠ” sys.stdin.readline().split()으둜 ν•΄μ„œ λ‹¨μ–΄λ³„λ‘œ μž…λ ₯을 λ°›μ•˜μ—ˆλŠ”λ°

for문을 μ΄μ€‘μœΌλ‘œ λ„λŠ” 과정이 살짝 ν—·κ°ˆλ Έλ‹€. strip()둜 μž…λ ₯ λ°›μœΌλ‹ˆ 더 μ½”λ“œκ°€ μ‰½κ²Œ ν’€λ Έλ˜ 것 같기도 ν•œκ±Έ

μ²˜μŒμ— words[i] != ' ' 이 뢀뢄을 κΉŒλ¨Ήμ–΄μ„œ 닡이 ν‹€λ Έμ—ˆμŒ

λ°˜λ‘€)
μž…λ ₯
2
aa aa
aa aa

μ •λ‹΅
[a]a aa
aa aa

λ‚˜μ˜ λ‹΅
[a]a aa
aa[ ]aa
# 2025-05-02 14:44-15:13
import sys
sys.stdin = open("input.txt","r")

n = int(sys.stdin.readline().strip())
input_list = [list(sys.stdin.readline().strip()) for _ in range(n)]
key_list = []

def return_key(words):
    #  μ™Όμͺ½μ—μ„œλΆ€ν„° 였λ₯Έμͺ½ μˆœμ„œλ‘œ λ‹¨μ–΄μ˜ 첫 κΈ€μžκ°€ 이미 λ‹¨μΆ•ν‚€λ‘œ μ§€μ •λ˜μ—ˆλŠ”μ§€
    if words[0].upper() not in key_list:
        key_list.append(words[0].upper())
        words[0] = '[' + words[0] + ']'
        return
    
    for i in range(1, len(words)):
        if words[i-1] == ' ' and words[i].upper() not in key_list:
            key_list.append(words[i].upper())
            words[i] = '[' + words[i] + ']'
            return
    
    # μ–΄λ– ν•œ 것도 λ‹¨μΆ•ν‚€λ‘œ μ§€μ •ν•  수 μ—†λ‹€λ©΄ κ·Έλƒ₯ 놔두며 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„μΉ˜ μ•ŠλŠ”λ‹€.
    for i in range(1, len(words)):
        if words[i] != ' ' and words[i].upper() not in key_list:
            key_list.append(words[i].upper())
            words[i] = '[' + words[i] + ']'
            return


for i in range(n):
    return_key(input_list[i])
    print(*input_list[i],sep='')

 


# μ°Έκ³  (ν‹€λ¦° μ½”λ“œ- μ²«μ‹œλ„)

μ™œ ν‹€λ¦°μ§€ λͺ¨λ₯΄κ² μŒ.. λͺ¨λ“  μ˜ˆμ œμ— λŒ€ν•œ 닡은 λ§žλŠ”λ° 

# 2025-05-01 11:14 - 55
import sys
sys.stdin = open("input.txt","r")

n = int(sys.stdin.readline().strip())
string_list = [sys.stdin.readline().split() for _ in range(n)]

key = []
for string in string_list:
    flag = False
    for i in range(len(string)):
        # λ‹¨μ–΄μ˜ 첫 κΈ€μžκ°€ 이미 단좕킀? -> 이미 μ§€μ •μ‹œ λ‹€μŒ 단어
        if string[i][0].upper() not in key and string[i][0].lower() not in key:
            key.append(string[i][0])
            flag = True
            break
    
    if not flag:
        for i in range(len(string)):   
            # κ·Έ μ–΄λ– ν•œ 것도 μ§€μ •ν•  수 μ—†λ‹€λ©΄ λŒ€μ†Œλ¬Έμž ꡬ별 X
            for s in string[i]:
                if s.upper() not in key and s.lower() not in key:
                    key.append(s)
                    flag = True
                    break
            if flag:
                break
    
    if not flag:
        key.append(None)

for i in range(len(string_list)):
    flag = False
    for string in string_list[i]:
        for s in string:
            if not flag and s == key[i]:
                print(f'[{s}]',end='')
                flag = True
            else:
                print(s,end='')
        print(end=' ')
    print()