본문 바로가기

알고리즘/백준

백준 10798번 세로읽기 (Python)

출처

백준 10798 세로읽기


정답

import sys

words = []
for i in range(5):  
  word = sys.stdin.readline().rstrip()
  words.append(word)

for i in range(15): 
  for j in range(5): 
    if i < len(words[j]):
      print(words[j][i], end="")

simplefied soultion for understanding

import sys

words = [["*" for i in range(15)] for j in range(5)]
for i in range(5):
  word = sys.stdin.readline().rstrip()
  for j in range(len(word)):
    words[i][j] = word[j]

for i in range(15):
  for j in range(5):
    if words[j][i] != "*":
      print(words[j][i], end="")

문제


입출력


풀이

0. 전략

구현전략
1) 2차원 배열 세로 출력한다 
2) 출력할 때 빈칸은 건너 뛰도록 한다 

1. 문제/입력값에 의한 초기 설정

# 배열에 문자열을  입력한다 
words = []
for i in range(5):  
  word = sys.stdin.readline().rstrip()
  words.append(word)
# words = ["AABCDD", "afzz", "09121", "a8EWg6", "P5h3kx"]  


## simplefied soultion for understanding 
# 입력받은 문자열을 저장할 2차원 배열 선언 
words = [["*" for i in range(15)] for j in range(5)]
# 다섯 줄을 입력으로 받아서 
for i in range(5):
  word = sys.stdin.readline().rstrip()
  # 2차원 배열의 각 인덱스에 저장한다 
  for j in range(len(word)):
    words[i][j] = word[j]
# words = [["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", "*", "*", "*", "*", "*", "*", "*", "*", "*"],

2. 문자열 세로 출력 알고리즘

# 문자열의 최대 길이만큼
for i in range(15): 
  # 5개의 행을 순회하며 
  for j in range(5): 
    # out of range 방지를 위해 
    # 문자열의 길이보다 열 index가 작을 때 #
    if i < len(words[j]):
      # 문자를 공백 없이 출력하라 
      print(words[j][i], end="")


## simplefied soultion for understanding 
# 2차원 배열의 열의 크기 만큼 
for i in range(15):
  # 2차원 배열의 행의 크기를 순회하며 
  for j in range(5):
    # 입력값으로 들어올 수 없는 "*" 이 아닌 경우 
    if words[j][i] != "*":
      # 문자를 공백 없이 출력하라 
      print(words[j][i], end="")      

3. 정답 출력

# 문자를 공백 없이 출력하라 
print(words[j][i], end="")

2차원 배열 출력하기

1) 2차원 배열

list_2d = [["A", "B", "C", "D", "E" ],
           ["1", "2", "3", "4", "5" ],
           ["a", "b", "c", "d", "e" ]]                   

3행 5열 2차원 배열

2) 가로 출력

for i in range(3):   # 행 # 반복문 1번에 i 번째 행을 처리 
  for j in range(5): # 열 # 반복문 1번에 i 번째 행의 j 열을 출력한다 
    print(f'list_2d([{i}][[{j}] = {list_2d[i][j]}', end=" "] 
  print()

# 반복문 처리 시 행은 고정, 열이 변경됨 
# A([0][0]) B([0][1]) C([0][2]) D([0][3]) E([0][4]) 
# 1([1][0]) 2([1][1]) 3([1][2]) 4([1][3]) 5([1][4]) 
# a([2][0]) b([2][1]) c([2][2]) d([2][3]) e([2][4])       

2차원 배열 가로 출력

3) 세로 출력

for i in range(5):    # 열 # 반복문 1번에 i 번째 열을 처리 ①
  for j in range(3):  # 행 # 반복문 1번에 j 번째 행을 처리 ②
    print(f'{list_2d[j][i]}([{j}][{i}])', end=" ")
  print()

# 반복문 처리 시 열은 고정, 행이 변경됨 
# A([0][0]) 1([1][0]) a([2][0]) 
# B([0][1]) 2([1][1]) b([2][1]) 
# C([0][2]) 3([1][2]) c([2][2]) 
# D([0][3]) 4([1][3]) d([2][3]) 
# E([0][4]) 5([1][4]) e([2][4])  

2차원 배열 세로 출력