본문 바로가기

백준/JavaScript

[JS] 백준 조건문 - 마지막 이야기

728x90

 

지인 일을 도와주다가 지금은 한가해져서 이렇게 노트북을 열었다.

얼른얼른 끝내야지 ㅎㅎ

 

오늘은 조건문 마지막이다!!

오늘의 조건문 마지막 이야기는~~~~

 

 

문제 2525번

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

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net

 

이 문제는 시와 분을 공백을 기준으로 입력받고, 다음줄에 요리하는 데 필요한 시간을 입력받도록 되어있었다.

그래서 어떻게 받아야할지 고민하다가 먼저 줄을 기준으로 입력받은 후 첫번째를 공백을 기준으로 나눠준 것을 보았다.

음... 이 방법을 사용하여 입력을 받으면 될 것 같다.

 

...

 

다 작성하고 테스트를 해봤는데 TypeError가 났다. 그래서 보니까 내가 입력을 받을 때 map을 이용하여 Number로 바꿔놓고 또 split을 이용하여 공백을 기준으로 나눴기 때문인 것 같다(자바스크립트가 문자열을 나눠서 받는건데 Number 타입으로 바꿔서 그런 것 같다).

 

그래서 map을 지워주니 결과가 제대로 잘 나온다 ㅎㅎ.

 

 

 

 

 

... 틀렸네?

 

 

다시 한 번 확인해보니 시가 23에서 0으로 넘어갈 때 조건을 처리해주지 않았다 ㅎㅎ(실수...).

 

수정하자...

const fs = require('fs');

//백준에 제출할 때 써야하는 코드
const readFileSyncAdress = '/dev/stdin';

//테스트
//const readFileSyncAdress = 'input.txt';

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

let A = parseInt(input[0].split(' ')[0]);
let B = parseInt(input[0].split(' ')[1]);
let C = parseInt(input[1]);

B+=C;
if(B>59){
    let num = Math.floor(B/60);
    B = Math.floor(B%60);
    A+=num;
    if(A>23){
        A-=24;
    }
}


console.log(A+' '+B);

 

 

휴... 23에서 0으로 넘어가도록 할 때 num을 더해줬으니까 24를 빼줬어야했는데 23을 빼줘서 어디가 틀렸는지 계속 찾았다 ㅎㅎ.

 

그래도 성공~~~~!

 

 

 

문제 2480번

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

 

2480번: 주사위 세개

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개만

www.acmicpc.net

 

주사위... 갑자기 보드게임 카페에서 주사위 게임한거 생각난다(그거 하면서 든 생각은 도박은 위험하다).

 

음... 입력받을 때 A,B,C해서 받으려고 했는데 나중에 가장 큰 수를 찾기 위해 input으로 받아줘야될 것 같다.

가장 큰 수를 찾는 함수인 max가 있을지 찾아보니까 있었다!!

Math.max()를 사용해서 배열 원소 중 가장 큰 숫자를 선택하면 된다 ㅎㅎ.

 

const fs = require('fs');

//백준에 제출할 때 써야하는 코드
const readFileSyncAdress = '/dev/stdin';

//테스트
//const readFileSyncAdress = 'input.txt';
let reward;

const input = fs.readFileSync(readFileSyncAdress).toString().split(' ').map(Number);

let A = input[0];
let B = input[1];
let C = input[2];

if(A===B&&B===C){
    reward = 10000+A*1000;
}else if(A===B||B===C||A===C){
    if(A==B||A==C){
        reward = 1000+A*100;
    } else{
        reward = 1000+B*100;
    }
}else{
    let Max = Math.max(...input);   //...를 안 붙이니까 예제 3에서 NaN가 나옴
    reward = Max*100;
}

console.log(reward);

 

 

예제 3에서 NaN가 나왔길래 '...'을 배열 앞에 붙였더니 잘 나왔다.

배열을 입력해줄 때는 spread 연산자인 '...'을 꼭 사용해야한다고 한다.

 

펼치다, 퍼뜨리다 라는 뜻을 가진 spread는 객체 혹은 배열을 펼칠 수 있다고 한다.

기존의 것을 건들이지 않고, 새로운 객체를 만들어야 하는 상황에서 사용할 수 있는 유용한 분법이 바로 이 spread 이다.

 

그렇구나 ㅎㅎ.

난 왜 '...'가 붙어있나 했다.

오늘도 하나 배웠군 ㅎㅎ

 

 

오늘은 낮에 끝내서 좋구만

역시 할 일은 미리미리 해놓는 것이 좋다.

 

 

드디어 다음 단계로 넘어간다~~

그럼 내일 만나욥!

 

 

[참고]
https://spookyjelly.tistory.com/52
https://ggcoding.tistory.com/66

https://velog.io/@rkio/%EB%B0%B1%EC%A4%80-Javascript-2480
https://learnjs.vlpt.us/useful/07-spread-and-rest.html

 

728x90