르탄이가 1000원을 가지고 편의점에서 물건을 사려고 한다.
편의점에는 500원, 100원, 50원, 10원이 충분히 있고,
편의점 직원은 언제나 거스름돈 개수가 가장 적게 잔돈을 준다.
르탄이가 편의점에서 물건을 사고 1000원 지폐 한 장을 냈을 때,
받을 잔돈의 개수를 구하는 프로그램을 작성하여라.
(단, 물건의 가격은 10원 이상 1000원 미만이며, 1원 단위는 고려하지 않는다.)
function solution(num) {
let answer = 0;
let exchange = 1000 - num;
while (exchange !== 0) {
// 잔돈이 0이 될 때 까지 while문 실행
if (exchange >= 500) {
// 잔돈이 500원 이상이면 잔돈에서 500원 차감하고 answer에 +1
exchange -= 500;
} else if (exchange >= 100) {
// 잔돈이 500원 이상이면 잔돈에서 500원 차감하고 answer에 +1
exchange -= 100;
} else if (exchange >= 50) {
// 잔돈이 100원 이상이면 잔돈에서 500원 차감하고 answer에 +1
exchange -= 50;
} else if (exchange >= 10) {
// 잔돈이 50원 이상이면 잔돈에서 500원 차감하고 answer에 +1
exchange -= 10;
} else if (exchange >= 1) {
// 잔돈이 1원 이상이면 잔돈에서 500원 차감하고 answer에 +1
exchange -= 1;
}
answer++;
}
return answer; // 르탄이에게 준 잔돈 개수를 출력
}
let num1 = 160;
console.log(solution(num1)); // result : 8 출력
1번 문제는 백준의 5585문제와 같다. 나는 우선 르탄이에게 주어야하는 잔돈을 먼저 계산하고,
while
문을 사용해서exchange
이 0이 될 때 까지 반복해주고 잔돈을 준 개수를 구하기 위해answer
에+1
씩 해주고 출력해주었다.
"OOXXOXXOOO"와 같은 OX문의 결과가 있다.
O는 문제를 맞은 것이고, X는 문제를 틀린 것이다.
문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다.
예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
(단, OX문의 결과는 0보다 크고 80보다 작은 문자열이 주어진다.
또한 문자열은 O와 X만으로 이루어져 있다.)
function solution2(str) {
let data = str.split('X'); // 문자열 'X'로 구분하게 되면
// data = ['O', 'OOO', '', '', 'O', 'OO', 'OOOOO', 'O']
let array = [];
let answer = 0;
for (let i = 0; i < data.length; i++) {
// for을 사용해서 중간에 있는 빈 문자열을 제거
if (data[i] !== '') {
array.push(data[i]); // 빈 문자열을 제외하고 문자열이 있는 경우만 array에 넣음
}
}
// array = [ 'O', 'OOO', 'O', 'OO', 'OOOOO', 'O' ]
for (let i = 0; i < array.length; i++) {
//'O'가 연속으로 올 때, 1 + 2 + ... 식으로 더해주면 됨
for (let j = 1; j <= array[i].length; j++) {
answer += j; // array[i]안에 있는 문자열의 인덱스 수 만큼 1 + 2 + 3...
}
}
return answer; // 더한 값을 출력
}
let str = 'OXOOOXXXOXOOXOOOOOXO';
console.log(solution2(str)); // result : 27 출력
2번 문제는 백준의 8958 문제이다.