Python - SWEA D3

수현·2022년 11월 17일
0

Coding Test

목록 보기
1/14
post-thumbnail

📕 12368. 24시간

swea 12368. 24시간

문제

 하루는 24시간이다. 24시간제 시계에서는 하루가 자정에서 시작해서 다음 날 자정에서 끝나며, 자정에서부터 지금까지 흐른 시간을 기준으로 시각을 표기한다. 예를 들어, 지금이 오후 8시라면 “20시”와 같은 꼴로 표현할 수 있다. 자정을 표기하는 유일한 방법은 “0시”임에 유의하라.
  지금은 자정에서부터 정확히 A시간이 지났다. 앞으로 정확히 B시간이 더 지난다면, 24시간제 시계에서 그 때는 몇 시일까?

코드

T = int(input())

for test_case in range(1, T+1):
    A, B = map(int, input().split())

    answer = A + B

    if A+B >= 24:
        answer = answer % 24

    print("#{} {}". format(test_case, answer))

풀이

A와 B시간 더한 후 24시간이 넘으면 24의 나머지 출력

📕 3431. 준환이의 운동관리

swea 3431. 준환이의 운동관리

문제

1주일에 L분 이상 U분 이하의 운동을 하여야 한다.
준환이는 이번 주에 X분만큼 운동을 하였다.

당신은 준환이가 제한되어 있는 시간을 넘은 운동을 한 것인지, 그것이 아니라면 몇 분 더 운동을 해야 제한을 맞출 수 있는지 출력하는 프로그램을 작성해야 한다.

코드

T = int(input())

for test_case in range(1, T+1):
    L, U, X = map(int, input().split())
    # L분 이상 U분 이하 운동 목표
    # X분만큼 운동 실천 
    answer = 0 

    if X > U: # 더 많은 운동한 경우 -1 출력
        answer = -1
    elif L > X: # 추가로 운동해야 하는 경우 추가 시간 출력
        answer = L-X
    elif L <= X and X <= U: # 목표 만큼 운동한 경우 0 출력
        answer = 0

    print("#{} {}". format(test_case, answer))

풀이

  1. 3가지 경우로 나눠서 확인
    (1) 실천이 최대 목표보다 큰 경우
    (2) 실천이 최소 목표보다 작은 경우
    (3) 실천이 목표 범위 안에 들어올 경우
  2. 각자 조건에 알맞게 출력

📕 13218. 조별과제

swea 13218. 조별과제

문제

당신의 수업에는 N명의 수강생이 있다. 당신은 학생들에게 조별과제를 부여하기 위해 학생들을 몇 개의 조로 나누려고 한다.

  당신은 한 조가 2명 이하의 학생으로 구성되면 토론이나 업무 배분 등이 제대로 이루어지지 않는다고 생각한다. 따라서, 당신은 3명 이상의 학생으로 구성된 조의 수를 최대화하려고 한다. 각 학생은 정확히 한 개의 조에만 속할 수 있다.

  학생들을 조로 적당히 나누었을 때, 3명 이상의 학생으로 구성된 조의 수의 최댓값이 얼마인지를 구하는 프로그램을 작성하라.

코드

T = int(input())

for test_case in range(1, T+1):
    N = int(input()) # 학생의 수 

    answer = N//3

    print("#{} {}". format(test_case, answer))

풀이

3으로 나눈 몫

📕 10505. 소득 불균형

swea 10505. 소득 불균형

문제

통계 자료를 처리할 때, 평균이 전체 집단의 특징을 꼭 잘 표현하는 것은 아니다.

예를 들어, 대다수의 국가에서는 적은 수의 사람이 국가 전체 소득의 꽤 많은 부분을 차지하기 때문에, 해당 국가의 평균 소득은 보통 사람들의 소득보다 높은 경우가 많다.

당신은, n명의 사람의 소득이 주어졌을 때 이 중 평균 이하의 소득을 가진 사람들의 수를 출력해야 한다.

코드

T = int(input())

for test_case in range(1, T+1):
    N = int(input()) # 정수의 개수 
    data = list(map(int, input().split()))
    answer = 0; num = 0

    # 평균 구하기 
    for i in data:
        num += i

    ave = num / N

    # 평균 이하 사람의 수 구하기

    for i in data:
        if i <= ave:
            answer += 1

    print("#{} {}". format(test_case, answer))

풀이

  1. 평균을 입력받은 data에서 꺼내 평균 구하기
  2. 전체를 if문을 통해 비교하여 평균 이하의 수 구하기

📕 4406. 모음이 보이지 않는 사람

swea 4406. 모음이 보이지 않는 사람

문제

알파벳에서 모음은 ‘a’, ‘e’, ‘i’, ‘o’, ‘u’의 다섯가지로 예를 들어 “congratulation”이라는 단어를 당신이 보게 되면 “cngrtltn”으로 인식하게 될 것이다.

코드

T = int(input())

vowel = ['a', 'e', 'i', 'o', 'u']

for test_case in range(1, T+1):
    data = input()

    for i in data:
        if i in vowel:
            data = data.replace(i,'')

    print("#{} {}". format(test_case, data))

풀이

  1. data문자열에 모음이 있는지 확인
  2. 있는 경우 ''공백으로 바꾸기

📕 1217. [S/W 문제해결 기본] 4일차 - 거듭 제곱

swea 1217. [S/W 문제해결 기본] 4일차 - 거듭 제곱

문제

다음과 같이 두 개의 숫자 N, M이 주어질 때, N의 M 거듭제곱 값을 구하는 프로그램을 재귀호출을 이용하여 구현해 보아라.

2 5 = 2 X 2 X 2 X 2 X 2 = 32
3 6 = 3 X 3 X 3 X 3 X 3 X 3 = 729

코드

for i in range(10):
    T = int(input())
    N, M = map(int, input().split())
    answer = 1

    for j in range(M):
        answer *= N

    print("#{} {}". format(T, answer))

풀이

M만큼 N을 거듭 제곱하기 위해 for문 이용하여 반복

📕 1289. 원재의 메모리 복구하기

swea 1289. 원재의 메모리 복구하기

문제

메모리 bit중 하나를 골라 0인지 1인지 결정하면 해당 값이 메모리의 끝까지 덮어씌우는 것이다.

예를 들어 지금 메모리 값이 0100이고, 3번째 bit를 골라 1로 설정하면 0111이 된다.

원래 상태가 주어질 때 초기화 상태 (모든 bit가 0) 에서 원래 상태로 돌아가는데 최소 몇 번이나 고쳐야 하는지 계산해보자.

코드

T = int(input())

for test_case in range(1, T+1):
    data = input()
    answer = 0
    N = '0'

    for i in range(len(data)):
        if data[i] != N:
            N = data[i]
            answer += 1

    print("#{} {}". format(test_case, answer))

풀이

참고

📕 11688. Calkin-Wilf tree 1

swea 11688. Calkin-Wilf tree 1

문제

Calkin-Wilf tree는 모든 양의 유리수를 정확히 하나씩 포함하고 있는 트리다. 이 트리는 다음과 같이 정의된다
    ∙ 트리의 루트는 1/1 을 나타낸다.
    ∙ 트리의 각 노드는 왼쪽 자식과 오른쪽 자식을 가지는데 어떤 노드가 a/b 를 나타내고 있다면, 왼쪽 자식은 a/a+b 를 오른쪽 자식은 a+b/b 를 나타낸다.
루트 노드에서부터, 자식을 따라 내려간 방향이 순서대로 주어질 때, 마지막에 위치한 노드가 어떤 유리수를 나타내는지 구하는 프로그램을 작성하라.

코드

T = int(input())

for test_case in range(1, T+1):
    data = input()

    val_L = 1; val_R = 1 # 트리의 루트 (분자, 분모)

    for i in data:
        if i == 'L':
            val_R = val_L + val_R
        elif i == 'R':
            val_L = val_L + val_R


    print("#{} {} {}". format(test_case, val_L, val_R))

풀이

  1. L일 경우 분모에 L+R
  2. R일 경우 분자에 L+R

📕 1215. [S/W 문제해결 기본] 3일차 - 회문1

swea 1215. [S/W 문제해결 기본] 3일차 - 회문1

문제

코드

for test_case in range(1, 10):
    N = int(input()) # 회문 길이 
    arr = [input() for _ in range(8)] # 8X8 배열 
    answer = 0 # 회문 개수 
    
    # 가로 확인 
    for i in range(8):
        for j in range(8-N+1):
            arr1 = []
            for k in range(N):
                arr1 += arr[i][j+k]
                
                # 회문인지 확인 (배열과 역순 배열이 일치하는지)
            if arr1 == arr1[::-1]:
                answer += 1

        # 세로 확인 
    for i in range(8):
        for j in range(8-N+1):
            arr2 = []
            for k in range(N):
                arr2 += arr[j+k][i]

            if arr2 == arr2[::-1]:
                answer += 1
        
    print("#{} {}". format(test_case, answer))

풀이

  1. 시작점을 1부터 8-N까지 N만큼 배열에 저장
  2. 저장한 배열인지 회문인지 확인하기 위해 역순과 비교
  3. 가로, 세로 반복

📕 10570. 제곱 팰린드롬 수

swea 10570. 제곱 팰린드롬 수

문제

앞으로 읽어도 뒤로 읽어도 똑같은 문자열을 팰린드롬 혹은 회문이라고 부른다. 어떠한 실수 N이 양의 정수이며, 십진수로 표현했을 때 팰린드롬이면 이 수를 팰린드롬 수라고 부른다.

어떠한 양의 정수 N에 대해서, N과 √N이 모두 팰린드롬이면 이 수를 제곱 팰린드롬 수 라고 부른다.

예를 들어, 121은 제곱 팰린드롬 수인데, 121이 팰린드롬이며, 121의 제곱근인 11 역시 팰린드롬이기 때문이다.

A 이상 B 이하 제곱 팰린드롬 수는 모두 몇 개인가?

코드

T = int(input())

for test_case in range(1, T+1):
    A, B = map(int, input().split()) # A이상 B이하 
    answer = 0 # 제곱 팰린드롬 수의 개수 

    for i in range(A, B+1):
        C = i ** (1/2) # 제곱근

        if C == int(C): # 제곱근이 정수일 때
            i = str(i)
            C = str(int(C))
            if i == i[::-1] and C == C[::-1]:
                answer += 1

    print("#{} {}". format(test_case, answer))

풀이

  1. N과 N의 제곱근이 정수인 값 찾기
  2. N과 N의 제곱근이 회문 수인지 확인하기 위해 배열에 저장한후 역순과 비교

📕 12221. 구구단2

swea 12221. 구구단2

문제

 아기 석환이는 최근 구구단을 배웠다. 그래서 1 이상 9 이하의 자연수 두개를 곱셈할 수 있으나, 10 이상의 자연수를 곱셈하는 방법은 모른다.
두 정수 A, B가 주어진다. 아기 석환이 두 정수를 곱셈할 수 있으면 곱을 출력하고, 아니면 -1을 출력하라.

코드

T = int(input())

for test_case in range(1, T+1):
    A, B = map(int, input().split())
    answer = 0

    if A < 10 and B < 10:
        answer = A * B
    else:
        answer = -1

    print("#{} {}". format(test_case, answer))

풀이

구구단 계산하고, 10보다 큰 경우 -1 출력

📕 5601. [Professional] 쥬스 나누기

swea 5601. [Professional] 쥬스 나누기

문제

N명의 사람이 1리터의 쥬스를 나누어 각자 잔에 따라서 마시고자 한다.

첫번째 사람이 원하는 만큼 한잔 따르고, 두번째 사람이 원하는 만큼  한잔 따르고, ..., N번째 사람이 남은만큼 한잔 따른다.

그 후 N번째 사람이 N개의 잔 중에 하나를 가져가고, N-1번째 사람이 남은 잔 중에 하나를 가져가고, 최종적으로 첫번째 사람이 마지막으로 남은 잔을 가져간다.

이때 첫번째 사람부터 N번째 사람까지 각각 쥬스를 얼마씩 마시게 되는지 구하도록 하자.

코드

T = int(input())

for test_case in range(1, T+1):
    N = int(input())

    print("#{} ". format(test_case), end='')

    for i in range(N):
        print("{}/{} ". format(1, N), end='')
    print()

풀이

1/N을 N번 반복 출력

📕 1225. [S/W 문제해결 기본] 7일차 - 암호생성기

swea 1225. [S/W 문제해결 기본] 7일차 - 암호생성기

문제

코드

for test_case in range(10):
    T = int(input())
    queue = list(map(int,input().split()))
    i = 1

    while True:
        if i > 5: # i가 5보다 커지면 1로 초기화
            i = 1
            
        end = queue.pop(0) - i # 첫 번째 값빼서 i 만큼 빼기
        i += 1

        if end <= 0:
            queue.append(0)
            break

        queue.append(end)

    print("#{} {} {} {} {} {} {} {} {}". format(test_case + 1, *queue)) # []제외하고 출력

풀이

  1. 첫번째 값을 꺼내서 i만큼 뺀 후 끝에 저장
  2. i가 5보다 커지면 1로 초기화
  3. end값이 0이 되면 멈추고, 암호 도출

📕 1230. [S/W 문제해결 기본] 8일차 - 암호문3

swea 1230. [S/W 문제해결 기본] 8일차 - 암호문3

문제

코드

T = 10

for test_case in range(1, T+1):
    N = int(input()) # 원본 암호문의 길이
    crypto = list(map(int, input().split())) # 원본 암호문
    M = int(input()) # 명령어의 개수
    com = list(input().split()) # 명령어 

    arr = []
    for i in range(len(com)):
        if com[i] in ["I", "D", "A"]:
            if i != 0:
                arr.append(tmp)
            tmp = [com[i]]
        elif i == len(com)-1:
            tmp.append(com[i])
            arr.append(tmp)
        else:
            tmp.append(com[i])

    for i in range(M):
        if arr[i][0] == "I":
            x = int(arr[i][1])
            y = int(arr[i][2])
            s = arr[i][3:]
            for j in range(y):
                crypto.insert(x+j, int(s[j]))

        elif arr[i][0] == "D":
            x = int(arr[i][1])
            y = int(arr[i][2])
            for j in range(y):
                del(crypto[x])
        
        elif arr[i][0] == "A":
            y = int(arr[i][1])
            s = arr[i][2:]
            for j in range(y):
                crypto.append(int(s[j]))      
                     
    print("#{} {} {} {} {} {} {} {} {} {} {}". format(test_case, *crypto))

풀이

  1. com 명령어를 arr 배열에 다시 저장
  2. arr 명령어에서 한 단어씩 꺼낸 후 조건에 맞게 계산

📕 3314. 보충학습과 평균

swea 3314. 보충학습과 평균

문제

학생이 다섯 명 밖에 없다. 점수가 40점 이상인 학생은 그 점수를 그대로 가지지만 40점 미만은 학생은 보충학습을 받고 점수를 40점으로 올릴 수 있다.

이 때 학생 5명의 점수를 알 때 보충을 받을 학생이 모두 보충을 받고 나면 점수의 평균이 몇인지 출력하는 프로그램을 작성하라.

코드

T = int(input())

for test_case in range(1, T+1):
    score = list(map(int, input().split()))
    sum = 0

    for i in range(len(score)):
        if score[i] < 40:
            score[i] = 40

        sum += score[i]

    answer = int(sum / 5)

    print("#{} {}". format(test_case, answer))

풀이

  1. 점수가 40점보다 낮으면 40점으로 저장
  2. 모두 더한 후 5로 나눠 평균 구하기

📕 2805. 농작물 수확하기

swea 2805. 농작물 수확하기

문제

코드

T = int(input())

for test_case in range(1, T+1):
    N = int(input())
    score = [list(map(int, input())) for _ in range(N)]
    answer = 0

    # 중간 이전 (가운데 포함)
    for i in range(N//2+1):
        for j in range(N//2-i,N//2+i+1):
            answer += score[i][j]

    # 중간 이후 
    for i in range(1,N//2+1):
        for j in range(i,N-i):
            answer += score[i+N//2][j]

    print("#{} {}". format(test_case, answer))

풀이

  1. 0부터 N//2까지 y축을 양옆으로 1씩 늘려가며 값 더하기
  2. N//2+1 부터 N-1까지 y축을 양옆으로 1씩 줄여가며 값 더하기

📕 4751. 다솔이의 다이아몬드 장식

swea 4751. 다솔이의 다이아몬드 장식

문제

코드

T = int(input())

for test_case in range(1, T+1):
    word = input()
    answer = ['']*5

    a = "..#." # 첫번째, 다섯번째 줄
    b = ".#.#" # 두번째, 네번째 줄
    ab_last = "."
    c = "#." # 세번째 줄
    c_last = "#"

    N = len(word)

    answer[0] += a * N + ab_last
    answer[1] += b * N + ab_last
    for i in word:
        answer[2] += c + i + ab_last
    answer[2] += c_last
    answer[3] += b * N + ab_last
    answer[4] += a * N + ab_last

    for line in answer:
        print(line)

풀이

  1. 첫번째, 다섯번째 줄은 ..#.(시작, 반복) .(끝)
  2. 두번째, 네번째 줄은 .#.#(시작, 반복) .(끝)
  3. 세번째 줄은 #.문자. (시작, 반복) #(끝)

📕 1220. [S/W 문제해결 기본] 5일차 - Magnetic

swea 1220. [S/W 문제해결 기본] 5일차 - Magnetic

문제

코드

T = 10

for test_case in range(1, T+1):
    N = int(input()) # 100X100 행렬
    arr = [list(map(int, input().split())) for _ in range(N)]
    answer = 0 # 교착상태 개수 
    # N극 = 1 # S극 = 2

    for i in range(N): # 세로 별로 1->2 순서 확인 
        stack = []
        for j in range(N):
            if not stack and arr[j][i] == 1: # 스택이 비어있고, 1이 나오면 stack에 넣음
                stack.append(1)
            elif stack and arr[j][i] == 2: # 스택에 1이 있고, 2가 나오면 카운트 1증가
                answer += stack.pop()
       
    print("#{} {}". format(test_case, answer))

풀이

  1. 스택이 비어있을 때 2가 들어온다고 하더라도 테이블 아래로 떨어져 삭제됨
  2. 스택이 비어있고, 1이 들어온다면 1 저장
  3. 스택에 1이 저장되어 있고, 2가 들어온다면 카운트 +1 증가

📕 1234. [S/W 문제해결 기본] 10일차 - 비밀번호

swea 1234. [S/W 문제해결 기본] 10일차 - 비밀번호

문제

코드

T = 10

for test_case in range(1, T+1):
    N, pw = map(str, input().split())
    stack = []
    answer = ''

    for i in pw:
        n = len(stack)
        
        if n >=1 : 
            if i == stack[n-1]: # 입력할 값과 stack의 마지막 값 비교
                stack.pop() # 같을 경우 삭제
            else:
                stack.append(i) # 같지 않을 경우 추가 
        else:
            stack.append(i) # 첫번째 값은 바로 stack에 저장

    answer = ''.join(stack)

    print("#{} {}". format(test_case, answer))

풀이

  1. 첫번째 값은 바로 stack에 저장
  2. 두번째부터 입력할 값과 stack의 마지막 값과 비교
  3. 같을 경우 꺼내어 삭제, 다를 경우 추가

📕 1213. [S/W 문제해결 기본] 3일차 - String

swea 1213. [S/W 문제해결 기본] 3일차 - String

문제

주어지는 영어 문장에서 특정한 문자열의 개수를 반환하는 프로그램을 작성하여라.

Starteatingwellwiththeseeighttipsforhealthyeating,whichcoverthebasicsofahealthydietandgoodnutrition.

위 문장에서 ti 를 검색하면, 답은 4이다.

코드

T = 10

for test_case in range(1, T+1):
    N = int(input()) # 테스트 케이스 번호
    check = str(input()) # 검색하는 문자열
    sen = input() # 문장
    answer = 0

    n = len(check)

    for i in range(len(sen)): # 문장 전체 검사
        if sen[i:i+n] == check: # 검색 문자열 길이만큼 잘라서 비교
            answer += 1
        
    print("#{} {}". format(test_case, answer))

풀이

  1. 문자열 전체 길이만큼 검사
  2. 문장을 검색 문자열 길이만큼 자른 후 검색 문자열과 비교

📕 반반

swea 반반

문제

길이 4의 알파벳 대문자로 이루어진 문자열 S가 주어졌을 때, S에 정확히 두 개의 서로 다른 문자가 등장하고, 각 문자가 정확히 두 번 등장하는 지 판별하라.

코드

T = int(input())

for test_case in range(1, T+1):
    answer = "Yes"
    S = input()

    for i in S:
        if S.count(i) != 2:
            answer = "No"

    print("#{} {}".format(test_case, answer))

📕 View

swea View

문제

코드

T = 10

for test_case in range(1, T+1):
    N = int(input()) # 건물의 개수 
    height = list(map(int, input().split())) # 건물의 높이 
    answer = 0 # 조망권 확보된 세대 수 

    for i in range(2, N-1):
        data = height[i-2:i+3]
        data.sort()

        if height[i] == max(data):
            answer += data[-1] - data[-2]

    print("#{} {}".format(test_case, answer))

📕 암호문2

swea 암호문2

문제

0 ~ 999999 사이의 수를 나열하여 만든 암호문이 있다. 암호문을 급히 수정해야 할 일이 발생했는데,
이 암호문은 특수 제작된 처리기로만 수정이 가능하다. 이 처리기는 다음과 같이 2개의 기능을 제공한다.

1. I(삽입) x, y, s : 앞에서부터 x의 위치 바로 다음에 y개의 숫자를 삽입한다. s는 덧붙일 숫자들이다.[ ex) I 3 2 123152 487651 ]

2. D(삭제) x, y : 앞에서부터 x의 위치 바로 다음부터 y개의 숫자를 삭제한다.[ ex) D 4 4 ]

위의 규칙에 맞게 작성된 명령어를 나열하여 만든 문자열이 주어졌을 때, 암호문을 수정하고, 수정된 결과의 처음 10개 숫자를 출력하는 프로그램을 작성하여라.

코드

T = 10

for test_case in range(1, T+1):
    N = int(input()) # 원본 암호문 길이
    arr = list(map(str, input().split())) # 원본 암호문
    N2 = int(input()) # 명령어 개수 
    arr2 = list(map(str, input().split())) # 명령어 

    for i in range(len(arr2)):
        if arr2[i] == "I":
            x = int(arr2[i+1])
            y = int(arr2[i+2])
            s = arr2[i+3:i+y+3]
            for j in range(len(s)):
                arr.insert(x+j, s[j])
        elif arr2[i] == "D":
            x = int(arr2[i+1])
            y = int(arr2[i+2])
            del arr[x: x+y]
            print(arr)
    
    answer = " ".join(arr[:10])

    print("#{} {}".format(test_case, answer))

📕 퍼펙트 셔플

swea 퍼펙트 셔플

문제

코드

T = int(input())

for test_case in range(1, T+1):
    N = int(input())
    card = list(map(str, input().split()))
    answer = [[0] for i in range(N)]
    n = 0

    if N % 2 == 0:
        card_L = card[:int(N/2)]
        card_R = card[int(N/2):]
    else:
        card_L = card[:int(N/2)+1]
        card_R = card[int(N/2)+1:]

    for i in range(len(card_R)):
        answer[n] = card_L[i]
        answer[n+1] = card_R[i]
        n += 2

    if N%2 == 1:
        answer[n] = card_L[-1]

    answer = " ".join(answer)
    
    print("#{} {}".format(test_case, answer))

📕 팔씨름

swea 팔씨름

문제

공정하고 재밌는 경기를 위해 둘은 15번 팔씨름을 하여 8번 이상 이기는 사람이 점심 값을 면제받기로 하였다.

둘은 지금까지 k번의 팔씨름을 진행했다. 이 결과는 길이가 k인 ‘o’ 또는 ‘x’로만 구성된 문자열 S[1..k]로 나타낼 수 있다. S[i]가 ‘o’면 소정이가 i번째 경기에서 승리했다는 것이고, ‘x’면 패배했다는 것이다.

소정이는 앞으로 팔씨름을 15번째 경기까지 진행했을 때 자신이 점심값을 면제받을 가능성이 있는지 알고자 한다. 이를 대신해 주는 프로그램을 작성하라.

코드

T = int(input())

for test_case in range(1, T+1):
    arr = input()
    answer = "YES"
    n = 0
    
    for i in arr:
        if i == "x":
            n += 1
            
        if n >= 8:
            answer = "NO"
    
    print("#{} {}".format(test_case, answer))

📕 의석이의 세로로 말해요

swea 의석이의 세로로 말해요

문제

이 장난감에 있는 글자들은 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’이다. 의석이는 칠판에 글자들을 수평으로 일렬로 붙여서 단어를 만든다.
다시 그 아래쪽에 글자들을 붙여서 또 다른 단어를 만든다. 이런 식으로 다섯 개의 단어를 만든다. 아래에 의석이가 칠판에 붙여 만든 단어들의 예가 있다.
 
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

만들어진 다섯 개의 단어들의 글자 개수는 서로 다를 수 있다.
심심해진 의석이는 칠판에 만들어진 다섯 개의 단어를 세로로 읽으려 한다.
세로로 읽을 때, 각 단어의 첫 번째 글자들을 위에서 아래로 세로로 읽는다. 다음에 두 번째 글자들을 세로로 읽는다.
이런 식으로 왼쪽에서 오른쪽으로 한 자리씩 이동 하면서 동일한 자리의 글자들을 세로로 읽어 나간다.

위의 그림 1의 다섯 번째 자리를 보면 두 번째 줄의 다섯 번째 자리의 글자는 없다. 이런 경우처럼 세로로 읽을 때 해당 자리의 글자가 없으면, 읽지 않고 그 다음 글자를 계속 읽는다.
그림 1의 다섯 번째 자리를 세로로 읽으면 D1gk로 읽는다.
위에서 의석이가 세로로 읽은 순서대로 글자들을 공백 없이 출력하면 다음과 같다:

Aa0aPAf985Bz1EhCz2W3D1gkD6x

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

코드

T = int(input())

for test_case in range(1, T+1):
    answer = ""
    arr = []

    for _ in range(5):
        arr.append(input())

    max_len = 0
    for r in arr:
        if len(r) > max_len:
            max_len = len(r)

    for i in range(max_len):
        for j in range(5):
            if i < len(arr[j]): # 문자열이 짧은 경우 
                answer += arr[j][i]
    
    print("#{} {}".format(test_case, answer))

📕 GNS

swea GNSGNS

문제

아래는 이 행성에서 사용하는 0 ~ 9의 값을 순서대로 나타낸 것이다.

"ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"

0 ~ 9 의 값을 나타내는 단어가 섞여 있는 문자열을 받아 작은 수부터 차례로 정렬하여 출력하는 프로그램을 작성하라.
예를 들어 입력 문자열이 "TWO NIN TWO TWO FIV FOR" 일 경우 정렬한 문자열은 "TWO TWO TWO FOR FIV NIN" 이 된다.

코드

풀이

📖출처📖

SWEA python

profile
Notion으로 이동 (https://24tngus.notion.site/3a6883f0f47041fe8045ef330a147da3?v=973a0b5ec78a4462bac8010e3b4cd5c0&pvs=4)

0개의 댓글