10798번 : 세로읽기
2024. 1. 6. 16:54ㆍ개인활동/코테
입력받은 값을 열별로 읽어와 차례대로 한줄로 출력하는 문제이다.
이때 한 행에 들어가는 데이터의 수가 최소 1개, 최대 15개이다.
이 부분을 어떻게 해결할 것인가가 가장 큰 포인트
오늘도 머리가 안돌아가 gpt의 코드 수정 서비스를 받아봤다.
matrix = []
max_length = 0 # 최대 행 길이를 저장할 변수
# 입력 받으면서 최대 행 길이를 찾음
for i in range(5):
row = list(map(str, input().strip()))
matrix.append(row)
max_length = max(max_length, len(row))
# 행의 길이를 최대 길이에 맞게 조절
for i in range(5):
matrix[i] += [''] * (max_length - len(matrix[i]))
# 열 먼저 출력
for i in range(max_length): # 열
for j in range(5): # 행
print(matrix[j][i], end='')
열을 우선적으로 읽어들이는 것은 매우 쉽다.
다만 행의 길이가 다 같지 않기에 이를 어떻게 처리할 것인가?
gpt 선생님은 빈공간을 넣어주어 열수를 맞춰주고 출력한다.
출력할 때 end='' 옵션으로 인해 어차피 공백없이 출력이 된다.
따라서 읽어서 출력할 때 빈 공간을 읽더라도 자연스레 무시하게 되는 원리임
그리고 이제 숏코드 분석
print(''.join(sum(zip(*eval('input()+" "*15,'*5)),())).replace(' ',''))
1. 빈 문자열에 join을 해주고 있음
2. 최대 입력되는 문자열이 15이기 때문에 input() 값에 빈 문자열 15개를 일단 붙여줌
3. 그리고 input값을 총 5번(5행까지 입력되기 때문) 받기 위해 *5를 붙여줌
4. asterisk가 붙는 이유는 입력받은 문자열을 unpacking하여 문자로 분리할 수 있도록 함
5. zip 함수를 통해 입력받은 문자들을 하나로 묶어주고, 공백은 replace를 이용해 없애줌
6. 그리고 문자들을 sum을 이용해 하나로 합쳐 빈 문자열인 ''에 넣어 출력한다.
이런 코드는 어떻게 생각하는걸까?
늘 신기하다.
'개인활동 > 코테' 카테고리의 다른 글
백준 2587번 : 대푯값 (0) | 2024.01.12 |
---|---|
백준 2750 : 오름차순 정렬 (0) | 2024.01.12 |
2556번 : 최댓값 (1) | 2024.01.04 |
백준 2738번 : 행렬 덧셈 (0) | 2024.01.02 |
백준 11718번: 그대로 출력하기 (0) | 2023.09.13 |