본문 바로가기
알고리즘/그리디

[백준][Python] 21314번 민겸 수

by 임짠짠 2022. 4. 8.
반응형
 

21314번: 민겸 수

민겸 수 하나가 주어진다. 민겸 수는 대문자 M과 K로만 이루어진 문자열이며, 길이는 3,000을 넘지 않는다.

www.acmicpc.net

 

코드

def get_min():
    cnt = 0
    ans = []
    for i in inp:
        if i == 'M':
            cnt += 1
        elif i == 'K':
            if cnt != 0:
                ans.append(10**(cnt-1))
                cnt = 0
            ans.append(5)
    if cnt != 0:
        ans.append(10**(cnt-1))
    return ans        

def get_max():
    cnt = 0
    ans = []
    for i in inp:
        if i == 'M':
            cnt += 1
        elif i == 'K':
            if cnt==0:
                ans.append(5)
            else:
                num = 5*(10**cnt)
                ans.append(num) 
            cnt = 0
    if cnt != 0:
        for _ in range(cnt):
            ans.append(1)
    return ans

inp = input()
min_ans = get_min()
max_ans = get_max()
for i in max_ans:
    print(i,end='')
print()
for i in min_ans:
    print(i,end='')

 

 

설명

최댓값은 M은 만약 뒤에 K값이 있으면 그 K값과 묶어주는 것이 가장 크고, 만약 뒤에 M만 존재하면 M을 각각 하나씩 분리하는 것이 크다. 계속 K값이 나오지 않아서 for문을 나왔을 때도 cnt 값이 0이 아니면 M만 있는 것을 의미하기 때문에 cnt 개수만큼 1을 추가한다.

최솟값은 M은 뒤에 M이 나오면 K가 나오기 전까지 다 같이 묶어준다. K는 무조건 혼자 묶여야 한다. 여기서도 for문을 나왔을 때 cnt 값이 0이 아니면 10**(cnt-1)을 해준다.

 

반응형

댓글