10798번: 세로읽기
총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’
www.acmicpc.net
1~15개의 문자로 이루어진 문자열 5개가 칠판에 써있다. 그 단어들을 왼쪽부터 세로로 읽어 차례대로 출력하는 문제이다.
(1) 1차 구현 : 내가 작성한 코드 - 실패
words = []
for i in range(5):
words.append(input())
for i in range(15):
for j in range(5):
print(words[j][i], end='')
1~3줄은 칠판에 만들어진 5개의 글자(문자열)을 리스트로 입력받는 코드이다.
최소 1개, 최대 15개의 문자로 이루어진 문자열 5개를 입력한다는 조건이 부여되어있기 때문에 중첩 for문의 범위들을 정해주었다.
마지막 출력 코드에서는 세로로 읽어야하기 때문에 words[i][j]가 아닌 반대로 words[j][i]로 출력하는 코드로 구현했다.
하지만 런타임 에러가 떠버렸다...
vscode에서 실행시켜보니 출력하는 코드에서 "IndexError: string index out of range" 가 떴다.
(2) 2차 구현 : 내가 작성한 코드 - 정답
다시 곰곰히 생각해보니 최대 15개의 문자로 이루어진 문자열이지만, 그 문자열의 길이만큼 살펴봐야하는 것이다.
예를들어 'abcdefg' 를 입력하면 문자를 각각 7번만 읽으면 되는데 최대 길이로 설정한 15번 읽으려고 해서 에러가 발생한 것이다. 따라서 for문 안에 출력하기 전에 if문을 추가하여 문자가 7개면 7번 읽도록 다시 구현하였다.
words = []
for i in range(5):
words.append(input())
for i in range(15):
for j in range(5):
if i < len(words[j]): # 추가한 코드
print(words[j][i], end='')
(3) List Comprension 적용하여 더 깔끔하게 코드 수정하기
리스트 컴프리헨션은 리스트 생성을 한 줄의 코드로 구현할 수 있는 직관적이고 간단한 코드이다.
원래 알고 있었지만 자주 까먹게 된다... 처음에는 리스트 생성하는 데에 선언, for문 사용 때문에 3줄을 사용하였지만, 리스트 컨프리헨션으로 이렇게 한 줄로 깔끔하게 정리할 수 있다!
words = [input() for _ in range(5)]
for i in range(15):
for j in range(5):
if i < len(words[j]):
print(words[j][i], end='')
'🧩 Programming Languages > Python CodingTest' 카테고리의 다른 글
백준 단계별 풀기 - 시간복잡도 풀이 모음 (0) | 2023.12.08 |
---|---|
백준 2563번(silver 5) : 색종이 (0) | 2023.12.07 |
백준 2738번(bronze 5) : 행렬 덧셈 (1) | 2023.12.06 |
백준 25206번(sliver 5) : 너의 평점은 (0) | 2023.12.06 |
백준 11718번(bronze 5) : 그대로 출력하기 (0) | 2023.12.04 |