망나니 AWOS의 일상
article thumbnail

문제 풀이

내가 생각한 방법은 itertools라이브러리의 permutations(순열) 함수를 이용하는 것이었다.

permutations에 대한 자세한 설명은 밑에 있다.

 

파이썬을 파이썬답게 - 순열과 조합 - combinations, permutations

본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코

programmers.co.kr

간단히 요약하자면 aaba, ba, ababa, bbaa, baaba 총 5개의 단어가 입력으로 들어왔을 때

1. 5개의 단어 중에서 2개 단어를 합친다.

2. 합친 단어들 중에 *팰린드롬 단어를 찾는다.

*팰린드롬 - 어느 방향으로 읽어도 항상 같음. ex) 소주만 병만 주소, madam 

 

1, 2 과정을 통해 결과값을 반환해주면 된다.

출력 조건은 가능한 팰린드롬이 여러 가지라면 그중 아무거나 출력, 팰린드롬이 없다면 0을 출력

 

1번 과정에서 permutations를 써서 5개의 단어 중 2개 단어를 합쳐주고

2번 과정에서 팰린드롬인지를 판별하여 set()에 값을 넣어준다. set()을 쓴 이유는 팰린드롬이 중복될 수도 있어서 set()으로 걸러주었다.

자기 자신을 제외한 20개의 단어가 만들어짐 permutations

처음 짰던 코드다.

import sys
from itertools import permutations

test_case = int(input())
for _ in range(test_case):
    word_num = int(input())
    words = []
    word_set = set()
    for _ in range(word_num):
        words.append(sys.stdin.readline().rstrip())
    for val in permutations(words, 2):
        rs = ''.join(val)
        if rs[:] == rs[::-1]: word_set.add(rs)

    print(''.join(word_set)) if word_set else print(0)

예제에 있던대로 팰린드롬이 한 개라면 예제 출력과 같이 한 개만 나오겠지만 팰린드롬이 여러 가지라면 그중 하나만 출력해야 되는 걸 생각하지 못해서 삽질을 꽤 많이 했다. 

 

아래에 출력 조건을 생각한 완성된 코드와 주석을 달아놓았으니 차근차근 해보시면 될 것 같다.

 

완성된 코드!!👍😊

import sys
from itertools import permutations

# 테스트 케이스 개수
test_case = int(input())
for _ in range(test_case):
    # 단어의 수 k
    word_num = int(input())
    # k개의 단어를 담는 배열 words
    words = []
    # 만들어진 팰린드롬수 중 중복된 값이 있으면 제거를 위해 set() 사용
    word_set = set()
    rs_list = []
    for _ in range(word_num):
        words.append(sys.stdin.readline().rstrip())
    # 순열을 뽑기 위해 이용하는 permutations 자기 자신을 제외한 순열이 만들어짐
    # 5개중 2개, 5x4 = 20가지의 순열이 만들어짐
    for val in permutations(words, 2):
        rs = ''.join(val)
        # 혹시 모를 중복값에 대비해 set()으로 걸러줌
        # 팰린드롬인지 아닌지는 해당 단어와 거꾸로 읽었을 때의 단어가 같으면 된다.
        if rs[:] == rs[::-1]: word_set.add(rs)
    # 출력시 여러가지 팰린드롬수가 있다면 그 중 아무거나 출력하고 팰린드롬수가 없다면 0을 출력
    print(word_set.pop()) if word_set else print(0)

 

profile

망나니 AWOS의 일상

@AWOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!