https://www.acmicpc.net/problem/1049
1049번: 기타줄
첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주
www.acmicpc.net
- 사용언어 : node.js
- 알고리즘 : 수학, 그리디 알고리즘
- Solved.ac Tier : SILVER IV
node.js 코드
1. 문제 정리
N개의 기타 줄이 끊어졌다. 그래서 기타 줄을 새로 사야하는데.. 강토씨는 최대한 싸게 기타줄을 교체 하려고한다. 6줄 패키지도 있고 1줄짜리 단품도 있다더라.
뭐 그리디로 계산 해봐야지 탐욕적인 시키;
먼저 입력들을 받아 온 뒤 6줄짜리 패키지중에 최솟값과 1줄짜리 최솟값을 구해줬다.
그리고 제일 먼저 예외 처리 해준 것이 1줄짜리 6개 사는게 패키지보다 싼 경우를 예외 처리 해주었다.
그리고는 그 뒤는 그리디로 처리해주었다.
2. 완성 코드
const fs = require('fs');
let [num, ...inputs] = fs.readFileSync("/dev/stdin").toString().trim().split('\n');
let [stringCnt, brand] = num.split(' ').map((e)=>parseInt(e)) , answer = 0;
let brandArr = [], six_string_min = Number.MAX_SAFE_INTEGER, one_string_min= Number.MAX_SAFE_INTEGER;
for(let i = 0; i < brand; i++){
brandArr[i] = inputs[i].split(' ').map((e)=>parseInt(e))
if(six_string_min > brandArr[i][0]){
six_string_min = brandArr[i][0]
}
if(one_string_min > brandArr[i][1]){
one_string_min = brandArr[i][1]
}
}
if(one_string_min * 6 > six_string_min){
while(stringCnt>=6){
answer+= six_string_min
stringCnt -= 6
}
let tempAns = 0;
while(stringCnt>=1){
tempAns+= one_string_min
stringCnt -= 1
}
if(tempAns > six_string_min){
answer += six_string_min
console.log(answer)
}
else{
answer += tempAns
console.log(answer)
}
}
else{
while(stringCnt>=1){
answer+= one_string_min
stringCnt -= 1
}
console.log(answer)
}
'백준 알고리즘 > Lang-node.js' 카테고리의 다른 글
[백준/node.js] 18411번 試験 (Exam) (0) | 2022.04.12 |
---|---|
[백준/node.js] 4963번 섬의 개수 (0) | 2022.04.12 |
[백준/node.js] 1026번 보물 (0) | 2022.03.19 |
[백준/node.js] 1439번 뒤집기 (0) | 2022.03.19 |
[백준/node.js] 10610번 30 (0) | 2022.03.19 |