본문 바로가기

백준/JavaScript

[JS] 백준 2차원 배열 - 두 번째 이야기

728x90

 

 

문제 10798번

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

 

10798번: 세로읽기

총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’

www.acmicpc.net

 

이번에는 문자열을 세로로 읽어서 한줄로 출력해주는 문제이다. 

음... 줄마다 끊어준 후 이중 반복문을 통해 한줄로 만들어주면 될 것 같다.

가로로 읽기 위해 행의 개수로 for문을 만들고 그 안에 열의 개수로 for문을 만들어줬다면 세로는 반대로 해주면 된다.

그런데... 열의 개수는 다른데 어쩌지하고 고민하고 있는데, 다른 분의 풀이를 보니 조건문으로 처리하신 분도 있고 논리합 연자를 이용하신 분도 있었다.

 

그래서 두 코드를 따로 공부해본 후 작성해보았다.

 

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim().split('\n');

const maxlength = Math.max(...input.map(x=>x.length));
let result = '';
for(let i=0;i<maxlength;i++){
    for(let j=0;j<input.length;j++){
        result += input[j][i] || '';
    }
}

console.log(result);

 

 

일단 첫 번째는 단어들의 최대 길이를 구하고 각 단어들을 번갈아가며 한 글자씩 다른 변수에 넣어줬다.

여기서 최대 길이의 단어보다 짧은 단어는 undefinde을 반환하는데, 단축 평가 표현식을 통해 undefinde의 경우 false가 되어 논리합 연산자 뒤에 있는 빈 문자열을 더하게 된다고 한다.

[참고] https://tesseractjh.tistory.com/28

 

 

 

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim().split('\n');

const maxlength = Math.max(...input.map(x=>x.length));
let result = '';
for(let i=0;i<maxlength;i++){
    for(let j=0;j<input.length;j++){
        if(input[j][i]===undefined){
            continue;
        } else{
            result += input[j][i];    
        }
        
    }
}

console.log(result);

 

 

두 번째에서는 undefinde일때 continue를 해서 넘어가줬다.

[참고] https://onelight-stay.tistory.com/571
728x90