본문 바로가기
코딩테스트 파이썬/백준

밑 줄 ( 1474 번 )

by 세용용용용 2025. 8. 17.

1474번: 밑 줄

 


🧠 알고리즘

  • 그리디(Greedy) + 문자열 처리

 

✔️ 동작 방식

  • 단어들을 입력받아 리스트 answer에 저장
  • 소문자로 시작하는 단어의 인덱스를 low_idx 집합에 기록 (첫 단어 제외)
  • 필요한 언더바 구한 후 각 조건에 맞게 언더바 추가

 

 

🧾 코드

import sys

def _main(n, m):
    answer = []
    low_idx, str_len = set(), 0

    for idx in range(n):
        now_str = sys.stdin.readline().rstrip()
        if (idx > 0) and now_str[0].islower(): # 소문자 일경우 index 기록
            low_idx.add(idx)
        
        str_len += len(now_str)
        answer.append(now_str)

    under_count = m - str_len
    mod, na = under_count // (n - 1), under_count % (n - 1)
    
    for idx in range(1, n):
        if (idx in low_idx) and (na > 0): # 소문자 경우 언더바 추가
            answer[idx] = '_' + answer[idx]
            na -= 1

        answer[idx] = ('_' * mod) + answer[idx]

    for idx in range(n - 1, 0, -1): # 추가 언더바 남으면 대문자에도 추가
        if (idx not in low_idx) and (na > 0):
            answer[idx] = '_' + answer[idx]
            na -= 1
        
    return ''.join(answer)


n, m = map(int, sys.stdin.readline().rstrip().split())
print(_main(n, m))

 

 

⏱️ 시간 복잡도

for idx in range(1, n) : 순회하며 언더바 추가 ( 선형 시간 복잡도 )
for idx in range(n - 1, 0, -1): # 역순으로 추가하며 언더바 추가 ( 선형 시간 복잡도 )

해당 알고리즘 시간 복잡도 : 선형 시간 복잡도 ( O(n) )

'코딩테스트 파이썬 > 백준' 카테고리의 다른 글

기타콘서트 ( 1497 번 )  (0) 2025.08.19
기타리스트 ( 1495 번 )  (1) 2025.08.18
지름길 ( 1446 번 )  (3) 2025.08.17
뒤집기 II ( 1455 번 )  (2) 2025.08.17
나무꾼 이다솜 ( 1421 번 )  (2) 2025.08.11