[TIL] 항해99 본 모의고사

이현동·2023년 2월 2일
0

TIL

목록 보기
21/59

1. 잔돈 개수

문제 내용

르탄이가 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씩 해주고 출력해주었다.

2. OX

문제 내용

"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 문제이다.

profile
https://hdlee.dev

0개의 댓글