a b k d e g h i l m n ng o p r s t u w y 순서로 정렬하기?

1599번: 민식어 (acmicpc.net)

 

주어진 문자열들을 알파벳 순서가 아니라 a b k d e g h i l m n ng o p r s t u w y 순서로 정렬한 결과를 출력

 

처음에는 문자열 한쌍씩 알파벳 하나하나 비교해서 버블정렬로 해볼까?

 

생각은 했는데 상당히 까다로울 것 같더라고

 

근데 문득 자세히 보니까

 

a b k d e g h i l m n ng o p r s t u w y에서 k를 c로 바꿔보고 a,b,c,d,e... 

 

g를 f로 h를 g로 i를 h로 l을 i로... 해서 바꿔볼 생각을 하니까

 

a b k d e g h i l m n ng o p r s t u w y

a b c d e f  ghi  j  k    l m n o p q r s t 

 

중복이 안되더라?

 

그러면 주어진 문자열에서 먼저 ng를 L로 바꿔주고

 

나머지 k,g,h,i,l,... 문자들은 매핑되는 다른 문자로 바꿔주고

 

다시 ng를 L로 바꾼걸 소문자 l로 바꾼 다음에 그렇게 바꾼 문자열을 배열에 넣어주고

 

마지막에 한번에 정렬하면?

 

#문자열을 a b k d e g h i l m n ng o p r s t u w y 기준으로 정렬하기

# a b k d e g h i l m n ng o p r s t u w y
# a b c d e f g h i j k  l m n o p q r s t 에 매핑하면 중복이 안됨

from sys import stdin

n = int(stdin.readline())

change = {'k':'c', 'g':'f','h':'g','i':'h',
          'l':'i', 'm':'j', 'n':'k',
          'o':'m', 'p':'n', 'r':'o', 's':'p',
          't':'q', 'u':'r', 'w':'s', 'y':'t'}

answer = []

for _ in range(n):
    
    s = stdin.readline().rstrip()
    
    #먼저 ng를 L로 바꿔주고
    ss = list(s.replace('ng','L'))
    
    #나머지 바꿔야하는 문자를 매핑되는 다른 문자로 하나씩 바꿔준 다음
    for k in change:
        
        for i in range(len(ss)):
            
            if ss[i] == k:
                
                ss[i] = change[k]
    
    #마지막에 L은 소문자 l로 바꿔주고
    for i in range(len(ss)):
        
        if ss[i] == 'L':
            
            ss[i] = 'l'
    
    #바뀐 문자열과 원본 문자열을 둔 다음
    answer.append((ss,s))

#정렬하고 대응하는 원본 문자열을 차례대로 출력
answer.sort()

for i in range(len(answer)):
    
    print(answer[i][1])

 

TAGS.

Comments