백준 10798번을 풀어보았다.
간단한 문제지만 특정 열에 문자가 존재하는지 여부를 다양하게 확인할 수 있었다.
1. input[r]의 길이로 확인
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((value) => value.trim())
let output = ''
for (let c = 0; c < 15; c++) {
for(let r = 0; r < 5; r++) {
if (input[r].length <= c) continue
else output += input[r][c]
}
}
console.log(output)
2. input[r]의 특정 열의 값으로 확인
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((value) => value.trim())
let output = ''
for (let c = 0; c < 15; c++) {
for(let r = 0; r < 5; r++) {
if (input[r][c] === undefined) continue
else output += input[r][c]
}
}
console.log(output)
이때 if (input[r][c] === null) 로 작성하면 안 된다.
막연히 null이나 undefined나 비슷하다고만 생각해왔는데,
배열의 길이보다 큰 인덱스에 접근하면 undefined를 반환한다.
> let arr = [1, 2, 3]
undefined
> arr[4]
undefined
> arr[4] === undefined
true
> arr[4] === null
false
이때 위 조건을 짧은 조건문을 사용하여 나타낼 수도 있다.
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((value) => value.trim())
let output = ''
for (let c = 0; c < 15; c++) {
for(let r = 0; r < 5; r++) {
output += input[r][c] || ''
}
}
console.log(output)
💫 이 문제를 통해 배운 것
• 배열의 길이보다 큰 인덱스에 접근하면 undefined를 반환하며, null과 undefined는 서로 다른 값이다.
• 짧은 조건문도 잘 활용하자.