https://www.acmicpc.net/problem/25304
문제
준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.
영수증에 적힌,
- 구매한 각 물건의 가격과 개수
- 구매한 물건들의 총 금액
을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.
입력
첫째 줄에는 영수증에 적힌 총 금액 X 가 주어진다.
둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N 이 주어진다.
이후 N 개의 줄에는 각 물건의 가격 a 와 개수 b 가 공백을 사이에 두고 주어진다.
출력
구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes를 출력한다. 일치하지 않는다면 No를 출력한다.
예제 입력1
260000
4
20000 5
30000 2
10000 6
5000 8
예제 출력1
Yes
해결 방법
간단한 반복문 문제이다. 하지만 원인모를 오답으로 한 시간을 넘게 고민했다.
기운 빠지는 해결이었지만 어쨌든 해결해서 기쁘다 ㅎㅎ
1. 영수증에 적힌 총 금액을 변수로 저장한다.
2. 물건 종류의 수를 변수로 저장한다. (변수로 저장은 하지만 이후에 사용할 일은 없다.)
3. for문으로 돌면서 물건 값과 산 개수를 곱해서 answer에 더한다.
4. 1번에서 저장한 값과 같다면 Yes를 아니라면 No를 출력한다. (대소문자 주의)
크게 틀릴 게 없는데도 계속 오답으로 떴었는데 trim()을 넣으니까 해결됐다. vsCode로 확인할 땐 trim 전후로 차이가 없었는데 뭔가.. 있나 보다. 어쨌든 틀릴 게 없는데 계속 오답이 나온다면 입력 값을 정제할 때 trim()을 넣어보면 된다! 간혹 이런 문제들이 있는 것 같다.
전체 코드 1
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split("\n");
const sum = +input[0];
const N = +input[1];
let answer = 0;
for(let i=2; i<input.length; i++){
const [prime, num] = input[i].split(" ").map(Number);
let plus = prime * num;
answer += plus;
}
answer === sum ? console.log("Yes") : console.log("No");
전체 코드 2
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split("\n");
const sum = +input.shift();
const N = +input.shift();
let answer = 0;
input.forEach((e) => {
const [prime, num] = e.split(" ").map(Number);
let plus = prime * num;
answer += plus;
});
answer === sum ? console.log('Yes') : console.log('No');
이 코드는 첫 번째 방법에서 뭐가 잘못되었는지 모르겠어서 다른 방식으로 작성한 코드이다. 이 방법이 쪼오끔 더 빠르다!
'알고리즘 > 백준' 카테고리의 다른 글
[JavaScript] 백준 브루트 포스 #2231번 분해합 (0) | 2022.08.29 |
---|---|
[JavaScript] 백준 함수 #4673번 셀프넘버 (0) | 2022.08.27 |
[JavaScript] 백준 입출력과 사칙연산 #3003번 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2022.08.25 |
[JavaScript] 백준 브루트 포스 #2798번 블랙잭 (0) | 2022.08.23 |
[JavaScript] 백준 재귀 #11729번 (0) | 2022.08.19 |