[TIL] 항해99 본 모의고사

이현동·2023년 2월 2일
0

TIL

목록 보기
21/59
post-custom-banner

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
post-custom-banner

0개의 댓글