Study/Algorithm

<BEAKJOON> 14681 JavaScript

Poylib 2022. 3. 31. 22:48

1. 삼항 조건 연산자

  • 조건식의 평가 결과에 따라 반환할 값을 결정한다. (자바스크립트의 유일한 삼항 연산자)
  • 조건식 ? true일 때 반환할 값  : false일 때 반환할 값
  • 피연산자인 조건식은 불리언 타입의 값으로 평가될 표현식이다. 따라서 조건식의 평가 결과가 불리언 값이 아니라면, 불리언 값으로 암묵적 타입 변환된다.
  • 값으로 평가할 수 있는 표현식인 문이다. if...else 문으로 유사하게 처리 가능하지만 이는 표현식이 아닌 문이다. 즉 삼항 조건 연산자 표현식은 값처럼 다른 표현식의 일부가 될 수 있기에 if...else문보다 유용하다.
  • 조건에 따라 수행해야 할 문이 하나가 아니라 여러 개라면 if...else 문의 가독성이 더 좋을 수 있다.
let x = 10;
let result = x%2 ? '홀수' : '짝수';
//0은 false로 암묵적 타입 변환

console.log(result); //짝수

let ifResult = if (x % 2) {result = '홀수';} else {result = '짝수';};
console.log(ifResult); //SyntaxError: Unexpected token 'if'

2. 14681 (사분면 고르기)

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split(`\n`);
const a = parseInt(input[0]);
const b = parseInt(input[1]);
if( a > 0) {
 console.log(b>0?1:4);
}else {
  console.log(b>0?2:3);
}

처음에 작성했던 코드인데, 런타임 오류가 뜬다.

 const fs = require('fs');
 const input = fs.readFileSync(0).toString().split('\n');

let a = parseInt(input[0]);
let b = parseInt(input[1]);

 if (a > 0) {
   console.log(b > 0 ? 1 : 4);
 } else {
   console.log(b > 0 ? 2 : 3);
 }

구글링하다 이렇게 제출하고 오류를 해결했다.

readFileSync()에 들어간 입력이 문제였던거 같은데, 같은 방식으로 여태 제출하다 이 문제에서 왜 오류가 나는 지 모르겠다.

node.js 자체가 아직 낮설다보니 좀 더 공부하고 추후에 이유를 찾아보려한다.

참조
deep dive