본문 바로가기

FrontEnd/PS through Javascript

백준(BOJ) 2920: 음계

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

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Expressions_and_operators

풀이법중 이해가 되지 않았던 논리 연산자를 사용한 풀이가 있어서 논리 연산자에 관한 아래 사항을 먼저 정리한다.

 

객체 관련된 아래의 문법도 처음본다.

마치 메서드 처럼 쓰여 input에 대응하는 속성이 있으면 그 속성의 값이 곧 그 객체가 된다.

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

const result = {
  '1 2 3 4 5 6 7 8': 'ascending',
  '8 7 6 5 4 3 2 1': 'descending'
}[input[0]];
//마치 메서드 처럼 쓰여 매개변수로 전달된 input[0]에 대응하는 속성이 있으면 그 속성의 값이 곧 그 객체가 된다.
 
console.log(result || 'mixed');

 

 

한편 아래와 같이 매개변수로 count를 주고 그에 대응하는 속성이 없게 1,4로 엉터리로 변경하면 result객체는 어떤값이 될까? undefined가 된다.

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

let count = 0;

for (let i = 0; i < 7; i++){
  if (input[i] < input[i+1]) {
    count++;
  }
}

const result = {
  1: 'descending',
  4: 'ascending',
}[count];
console.log(result || 'mixed');

이것을 제대로 수정하여

이와 같이 한다면 알맞은 값이 나온다.

아래는 정답코드

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

input=input[0].split(" ").map(item=>+item)
let count = 0;

for (let i = 0; i < 7; i++){
  if (input[i] < input[i+1]) {
    count++;
  }	
}

const result = {
  0: 'descending',
  7: 'ascending',
}[count];
console.log(result || 'mixed');

이것은 나의 코드

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

input=input[0].split(" ").map(item =>+item)
console.log(solution(input));

function solution(input){
let result="";
for(let i=0;i<7;++i){
    if(input[i]==input[i+1]-1){
        result="ascending";
    }
    else if(input[i]==input[i+1]+1){
        result="descending";
    }
    else{
        result="mixed";
        return result;
    }
}
return result;

}