[SW Expert Academy] 13684 . 의석이의 세로로 말해요

sun1·2023년 3월 3일
0

im_test

목록 보기
12/22
post-thumbnail

문제

SWEA 13684 . 의석이의 세로로 말해요
https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AYYSRkW6cRoDFAVw&contestProbId=AX7w2kdKS8QDFARO&probBoxId=AYaPtr1K-_0DFARM&type=USER&problemBoxTitle=230303%3A+%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4_5&problemBoxCnt=6

풀이

조건

  • 테스트 케이스의 수 T가 주어지며 각 테스트 케이스는 총 다섯 줄로 이루어져 있다.
  • 각 줄에는 길이가 1이상 15이하인 문자열이 주어진다. 각 문자열은 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’만으로 이루어져 있다.
  • 세로로 읽은 순서대로 글자들을 출력한다.

풀이 순서

  • 5개의 단어의 길이를 비교하여 최대 길이를 구해주고 최대 길이 만큼 각 단어들의 길이를 늘려주기 위해 문자를 더해준다.
  • 리스트에 임의로 넣은 문자까지 포함해서 단어의 세로로 읽은 순서대로 글자들을 넣는다.
  • 임의로 넣은 문자를 전부 제거하여 출력한다.

코드

Python

T = int(input())
for tc in range(1, T + 1):
    arr = [input() for _ in range(5)]
    lst = []
    # 길이 최댓값 찾기
    mx = 0
    for i in range(5):
        if len(arr[i]) > mx:
            mx = len(arr[i])
    # 최대 길이보다 짧다면 그값만큼 - 채워주기
    for i in range(5):
        if len(arr[i]) != mx:
            for j in range(mx - len(arr[i])):
                arr[i] += '-'
    # 리스트에 세로로 한개씩 넣어주기
    for i in range(mx):
        for j in range(5):
            lst.append(arr[j][i])
    # 임의로 넣은 - 빼주기
    a = lst.count('-')
    for i in range(a):
        lst.remove('-')

    print(f'#{tc}', ''.join(lst))

다른 방법 1

T = int(input())
for tc in range(1, T + 1):
    arr = []
    for _ in range(5):
        arr.append(input())
    lst = []
    for j in range(15):  # 단어의 길이는 1이상 15이하 이므로
        for i in range(5):  # 다섯 단어 살피기
            if len(arr[i]) >= j + 1:  # 순회하는 값보다 단어 길이가 긻면 리스트에 추가
                lst.append(arr[i][j])
    print(f'#{tc}', ''.join(lst))

다른 방법 2

  • 하나씩 출력하기
T = int(input())
for tc in range(1, T + 1):
    print(f'#{tc}', end=' ')
    words = [input() for i in range(5)]
    for j in range(15):
        for i in range(5):
            if j < len(words[i]): # 해당 줄의 길이만큼만 출력하기
                print(words[i][j], end='')
    print()

0개의 댓글