ALGORITHM/BOJ

[백준_javascript] 조건문(2884, 2525, 2480)

오늘도 코딩하나 2024. 7. 27. 16:18

#2884 (알람시계)

const fs = require('fs');
const file = process.platform === 'linux' ? '/dev/stdin' : __dirname+'/input.txt';

const input = fs.readFileSync(file).toString().trim().split(' ');

let h = Number(input[0]);
let m = Number(input[1]);

let alarm = '';
if(m < 45) {
    if(h == 0) {
        h += 23;
    } else {
        h -= 1;
    }
    m = 60+m-45;
} else {
    m -= 45;
}

console.log(h,m);

 

#2525 (오븐 시계)

const fs = require('fs');
const file = process.platform === 'linux' ? '/dev/stdin' : __dirname+'/input.txt';

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

let [h,m] = input[0].split(' ').map(Number);
let lt = parseInt(input[1]);

if(m+lt > 60) {
    if(h == 23) h = 0;
    else h += 1;
    m = m+lt-60;
} else {
    m += lt;
}

console.log(h,m);

#2884 알람시계 문제와 유사한 문제인 줄 알고 호다닥 하다가 테스트도 제대로 안하고 제출했다..!

요리하는 데 필요한 시간이 60분을 넘을 수 있다는 점을 간과했다..머쓱;;

그래서 아래와 같이 다시 코드를 작성했다.

 

solution1.

const fs = require('fs');
const file = process.platform === 'linux' ? '/dev/stdin' : __dirname+'/input.txt';

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

let [h,m] = input[0].split(' ').map(Number);
let lt = parseInt(input[1]);

m += lt;
if(m >= 60) {
    h += Math.floor(m/60);
    m = m%60;
}

if(h>=24) {
    h %= 24;
}

console.log(h,m);

 

solution2.

const fs = require('fs');
const file = process.platform === 'linux' ? '/dev/stdin' : __dirname+'/input.txt';

let [time, lt] = fs.readFileSync(file).toString().trim().split('\n');
let [h,m] = time.split(' ').map(Number);
lt = parseInt(lt);

h = Math.floor((h*60+m+lt)/60);
m = (h*60+m+lt) % 60;


if(h>=24) {
    h -= 24;
}

console.log(h,m);

 

### 참고한 블로그

https://ggcoding.tistory.com/66

 

[JS] 백준 2525번 오븐 시계

https://www.acmicpc.net/problem/2525 2525번: 오븐 시계 첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23

ggcoding.tistory.com

 

#2480 (주사위 세개)

solution1_array.

const fs = require('fs');
const file = process.platform === 'linux' ? '/dev/stdin' : __dirname+'/input.txt';

let dice = fs.readFileSync(file).toString().trim().split(' ');

const result = {};
dice.forEach((x)=>{
    result[x] = (result[x] || 0) + 1;
})

let same = Object.keys(result).find(key => result[key] >= 2)
let cnt = Object.keys(result).length;

if(cnt == 1) {
    prize = 10000 + same * 1000;
} else if(cnt == 2) {
    prize = 1000 + same * 100;
} else {
    prize = Math.max.apply(null, dice) * 100;
}

console.log(prize);

배열을 활용해서 소스를 작성했다.

배열(dice)에서 중복값 개수에 대한 새로운 배열(result)을 만들고,

result 배열 안에서 조건으로 중복개수를 추출해냈다.

* 근데 아무도 이렇게 안한 거 같다..허헣

 

solution2_조건.

const fs = require('fs');
const file = process.platform === 'linux' ? '/dev/stdin' : __dirname+'/input.txt';

let dice = fs.readFileSync(file).toString().trim().split(' ').map(Number);

const a = dice[0];
const b = dice[1];
const c = dice[2];

let prize, maxNum = 0;

if (a === b && a === c) {
    prize = 10000 + a * 1000;
} else if(a === b || a === c || b === c) {
    if(a === b ||  a === c) {
        prize = 1000 + a * 100;
    } else {
        prize = 1000 + b * 100;
    }
} else {
    prize = Math.max(...dice)*100;
}

console.log(prize);

 

 

### 참고한 블로그(배열)

https://hianna.tistory.com/459

 

[Javascript] 배열 중복 값 개수 구하기

배열에 있는 값들이 몇번이나 중복 되는지 찾는 방법을 소개합니다. forEach() 이용하기 reduce() 이용하기 Map 객체 이용하기 1. forEach() 이용하기 const arr = ['a', 'b', 'a', 'b', 'c']; const result = {}; arr.forEach(

hianna.tistory.com

https://codechacha.com/ko/javascript-find-key-by-value/

 

JavaScript - 객체에서 value로 key 찾는 방법

일반적으로 value로 key를 찾으려면, 모든 key를 가져와서 key의 value와 찾으려는 value가 같은지 확인해야 합니다. Object.keys()와 find()를 이용하여 구현할 수 있습니다. Object.keys()는 object의 모든 key를

codechacha.com

https://codechacha.com/ko/javascript-get-min-max-in-array/

 

JavaScript - 배열에서 최대, 최소 값 찾기

자바스크립트에서 배열의 요소들 중에 최대 값과 최소 값을 찾는 방법을 소개합니다. 간단한 방법으로는 Math 함수를 사용하여 최대, 최소 값을 찾을 수 있습니다. 또는 for 루프를 사용하여 직접

codechacha.com

https://velog.io/@rkio/%EB%B0%B1%EC%A4%80-Javascript-2480

 

[백준 | Javascript] 2480

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

velog.io