흙금이네 블로그

[BOJ] 10798 - 세로읽기 (Python, JavaScript) 본문

알고리즘

[BOJ] 10798 - 세로읽기 (Python, JavaScript)

흙금 2023. 1. 23. 22:54

 

 

아이디어 #1

 

2차원 리스트의 행마다 한 줄씩 입력 받고, 출력 시에는 열을 우선으로 탐색한다.

 

 

풀이 #1 (Python)

 

빈 리스트 li를 만들고 인덱스 에러 방지를 위해 입력 받은 문자열 끝에 14개의 별 문자를 붙여 li에 추가한다.

빈 문자열 res를 만들고, 이중 for문에서 열을 우선으로 li를 탐색하며 별 문자가 아닌 문자를 res에 붙여 나간다.

 

li = []
for _ in range(5):
    S = input()
    li.append(S+'*'*14)
res = ''
for j in range(15):
    for i in range(5):
        if li[i][j] != '*':
            res += li[i][j]
print(res)

 

 

 

풀이 #2 (JavaScript)

 

풀이 #1 코드와 마찬가지 원리로 동작한다.

 

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');

let li = [];
for (let i=0; i<5; i++) {
    let S = input[i];
    li.push(S+'***************')
}
let res = '';
for (let j=0; j<15; j++) {
    for (let i=0; i<5; i++) {
        if (li[i][j] !== '*') res += li[i][j];
    }
}
console.log(res);

 

 

 

아이디어 #2

 

다른 분 코드를 참고해보니 1차원 리스트에 입력 받은 후, join 메서드로 결과를 출력할 수 있었다.

 

 

풀이 #3 (Python)

 

공백 문자로 채워진 리스트 li에 입력 받은 문자열의 문자들을 5칸씩 건너뛰며 저장한 후, join 메서드로 합쳐 출력한다.

 

li = ['']*75
for i in range(5):
    S = input()
    idx = i
    for c in S:
        li[idx] = c
        idx += 5
print(''.join(li))

 

 

 

풀이 #4 (JavaScript)

 

풀이 #3 코드와 마찬가지 원리로 동작하는데, 파이썬과 다르게 풀이 #2 코드보다 메모리도 더 많이 사용되고 더 느렸다.

 

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');

let li = new Array(75);
for (let i=0; i<5; i++) {
    let idx = i;
    for (let c of input[i]) {
        li[idx] = c;
        idx += 5
    }
}
console.log(li.join(''));

 

'알고리즘' 카테고리의 다른 글

[BOJ] 6550 - 부분 문자열 (Python, JavaScript)  (0) 2023.01.25
[BOJ] 1256 - 사전 (Python)  (0) 2023.01.25
[BOJ] 12104 - 순환 순열 (Python)  (0) 2023.01.23
[BOJ] 14729 - 칠무해 (Python)  (0) 2023.01.23
[BOJ] 1305 - 광고 (Python)  (0) 2023.01.21
Comments