본문 바로가기
with my rubber duck/codingTest

백준 10798 세로읽기 파이썬

by stilinski 2024. 5. 28.
728x90

 

lines = []
length = []
# 5줄 input받기
for i in range(5):
    line = input()
    lines.append(line)
    length.append(len(line))
    
#5개 문장중에서 제일 긴 것의 수 찾기
string_to_return=""
#제일 긴 문장만큼 반복문돌려서 문장당 글자 하나씩 순서대로 출력
for i in range(max(length)):
    for idx,line in enumerate(lines):
        if(length[idx] > i):
            string_to_return += line[i]
            
print(string_to_return)

https://www.acmicpc.net/problem/10798

 

1. 문제설명


→ 문제 요약(시간이 지나고 봐도 빠르게 파악이 가능하게 간단하게 정리할 것)

가로로 나열되어있는 글자들을 세로로 읽기

 

2. 접근 방식


→ 생각 과정 자세하게 적기

  1. 시간복잡도(있다면 적을 것)
  2. 문제 조건 분석 과정
  3. 최종 선택한 자료구조/알고리즘 혹은 풀이 방법

 

1. o(n) ?

2. 일단 한줄에 하나씩 출력해야하니까 제일 긴것의 길이만큼 반복문이 돌아야함.

근데 제일 긴거의 값이니까 다른것들은 당연히 짧을것이고 짧은 것들의 길이를 넘어가는 index를 출력하면 에러가 날 것임.

그래서 출력할 문장의 길이와 반복문의 index를 비교해서 i가 반복문의 길이보다 짧다면 출력할 값에 추가.

그 부분이 if(len(line) < i) 부분인데 반복문 돌때마다 거쳐야하니까 그게 좀 비효율적인 거 같음.

3. list 사용. 길이 구하기도 쉽고 index로 값 찾는것도 간편함

 

lines = []
# 5줄 input받기
for i in range(5):
    lines.append(input()) 
#5개 문장중에서 제일 긴 것의 수 찾기
cnt = max(len(lines[0]),len(lines[1]),len(lines[2]),len(lines[3]),len(lines[4]))
string_to_return=""
#제일 긴 문장만큼 반복문돌려서 문장당 글자 하나씩 순서대로 출력
for i in range(cnt):
    for line in lines:
        if(len(line) > i):
            string_to_return += line[i]
            
print(string_to_return)

 

 

3. 틀린 이유 설명


→ 어디서 막혔는지 왜 막혔는지 자세하게 기술

틀리진 않음

근데 뭔가 비효율적인것같음

4. 올바른 접근 방식 및 해결 방식


  1. 어떻게 해결했는지
  2. 올바른 접근 방식은 뭔지
lines = []
length = []
# 5줄 input받기
for i in range(5):
    line = input()
    lines.append(line)
    length.append(len(line))
    
#5개 문장중에서 제일 긴 것의 수 찾기
string_to_return=""
#제일 긴 문장만큼 반복문돌려서 문장당 글자 하나씩 순서대로 출력
for i in range(max(length)):
    for idx,line in enumerate(lines):
        if(length[idx] > i):
            string_to_return += line[i]
            
print(string_to_return)

 

각 라인의 길이를 따로 배열에 저장해봄.

근데 알고보니 python array의 len의 시간복잡도는 o(1)이라고 함.

뭐야 그럼 이거나 저거나 같네

속도가 오히려 느림

 

 

lines = []
length = []
# 5줄 input받기
for i in range(5):
    line = input()
    lines.append(line)
    length.append(len(line))
    
#5개 문장중에서 제일 긴 것의 수 찾기
string_to_return=""
#제일 긴 문장만큼 반복문돌려서 문장당 글자 하나씩 순서대로 출력
for i in range(max(length)):
    for j in range(5):
        if(length[j] > i):
            string_to_return += lines[j][i]
            
print(string_to_return)

2차배열로도 풀어봄

속도는 내가 처음에 푼거랑 똑같음

 

배워야할것 - 문제 입력예시를 보고 배열이 바로 떠올랐어야하는건데 안떠올랐음

728x90

댓글