본문 바로가기

코딩테스트/SWEA

[Python, 파이썬] SWEA 5356. 의석이의 세로로 말해요

칠판에 붙여진 단어들이 주어질 때, 의석이가 세로로 읽은 순서대로 글자들을 출력하는 문제.

 

 

T = int(input()) # 테스트케이스의 개수 T

for test_case in range(1, T+1):
    
    N = 5
    matrix = [input() for i in range(5)]

    all_length = [len(i) for i in matrix] # 모든 길이 저장
    length = max(all_length) # 최대 길이만

    print("#%d " %(test_case), end='')

    for i in range(length): # 최대 열의 길이
        for j in range(N): # 행 반복
            if(len(matrix[j]) > i): # 열의 개수 안에 있을 때
                print(matrix[j][i], end='')
    print()
 

 

[문제풀이]


A A B C D D
a f z z
0 9 1 2 1
a 8 E W g 6
P 5 h 3 k x
 

이렇게 입력받은 배열을 i와 j 위치를 바꿔서 세로로 읽으면 되는데, 이때 배열 크기는 각 행마다 제멋대로다.

 

all_length = [len(i) for i in matrix] # 모든 길이 저장
length = max(all_length) # 최대 길이만
 

그래서 각 행의 길이 중 최대 길이를 구해 그걸 for의 반복 변수로 삼는다.

그런데 이때 이대로 돌리면 최대 길이보다 작은 행을 읽을 때는 IndexError가 뜬다.

if(len(matrix[j]) > i): # 열의 개수 안에 있을 때
    print(matrix[j][i], end='')
 

그래서 현재 읽을 matrix[j]행의 i번째 값이 그 행의 열의 개수 안에 있을 때만 읽도록 했다.