백준 알고리즘 / 5.step1(1)

dudgus5766·2021년 7월 20일
0

알고리즘

목록 보기
6/15
post-thumbnail

4101번

문제 : https://www.acmicpc.net/problem/4101

풀이

/*
문제 : 두 양의 정수가 주어졌을 때, 첫 번째 수가 두 번째 수보다 큰지 구하는 프로그램을 작성하시오.
입력 : 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 두 정수가 주어진다. 두 수는 백만보다 작거나 같은 양의 정수이다. 입력의 마지막 줄에는 0이 두 개 주어진다.
출력 : 각 테스트 케이스마다, 첫 번째 수가 두 번째 수보다 크면 Yes를, 아니면 No를 한 줄에 하나씩 출력한다.
*/

// let fs = require('fs');
// let input = fs.readFileSync('/dev/stdin').toString().split('\n');

// let sum = Number(input);

// if(sum[0] < sum[1]){
//     console.log('No')    
// }else if(sum[0] > sum[1]){
//     console.log('Yes');
// }else{
//     console.log('');
// };

// input을 split으로 재배열시키는 것을 하지 않아 오류가 일어났다. 그리고 while문으로 반복을 시켜야 한다.

// 답안
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

let i=0;

while(true){
    let num1 = Number(input[i].split(' ')[0]);
    let num2 = Number(input[i].split(' ')[1]);
    // 여기서 배열의 0번, 1번 인덱스를 가져온다.
    i++;
    if(num1 === 0 && num2 === 0){
        break;
        // [0, 0]이 나올 경우 break로 멈추게 된다.
    } else if(num1 > num2){
       console.log('Yes');
    } else{
       console.log('No');
    }
}

4892번

문제 : https://www.acmicpc.net/problem/4892

풀이

/*
문제 : 숫자 맞추기 게임은 초등학교 학생들 사이에서 유행하는 게임이다. 선생님은 학생들의 연산 실력과 논리적인 사고력을 기르기위해 학생들에게 이 게임을 권유하고 있다.
이 게임을 시작할 때는 친구가 숫자 하나를 머리속에 생각해야 한다. 이 숫자를 n0이라고 하자. 그러고 나서 다음과 같이 게임을 진행한다.
친구에게 n1 = 3*n0 계산을 하라고 한 뒤, n1이 짝수인지 홀수인지를 말해달라고 한다.
n1이 짝수라면, n2 = n1/2를, 홀수라면 n2 = (n1+1)/2를 계산해달라고 한다.
n3 = 3*n2의 계산을 부탁한다.
친구에게 n4 = n3/9를 계산한 뒤, 그 값을 말해달라고 한다. (n4는 나눗셈의 몫이다)
자 이제, n1이 짝수였다면, n0 = 2*n4로, 홀수였다면, n0 = 2*n4+1로 처음 친구가 생각한 숫자를 맞출 수 있다.
예를 들어,  친구가 생각한 수가 n0=37이었다면, n1 = 111이 되고 홀수이다. 그 다음 n2 = 56, n3 = 168, n4 = 18이 된다. 친구는 n4를 알려주게 된다. 
그럼 2*n4+1 = 37이기 때문에, 친구가 제일 처음 생각한 숫자를 맞출 수 있다.
n0이 주어졌을 때, n1이 홀수인지 짝수인지와 n4를 구하는 프로그램을 작성하시오.
입력 : 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, n0으로 이루어져 있다. (0 < n0 < 1,000,000) 입력의 마지막 줄에는 0이 하나 주어진다.
출력 : 각 테스트 케이스에 대해서, 케이스 번호를 출력하고 n1이 짝수라면 'even', 홀수라면 'odd'를 출력하고, n4를 출력한다.
*/

// 답안

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
let i = 0;
let numbering = 1;
while(true){
    let num1 = Number(input[i]);
    let num2 = Number(num1*3);
        if(num1 === 0){
            break;
        }
        else if(num2%2 === 0){
            let j = 'even'
            let result = num2/2*3;
        }else{
            let j = 'odd'
            let result = (num2+1)/2*3;
        }
    result2 = Math.floor(result/9);
    console.log(`${numbering}. ${j} ${result2}`);
    i++;
    numbering++;
}

5217번

문제 : https://www.acmicpc.net/problem/5217

풀이

/*
문제 : 1보다 크거나 같고 12보다 작거나 같은 자연수 n이 주어졌을 때, 합이 n이 되는 두 자연수의 쌍을 찾는 프로그램을 작성하시오.
예를 들어, 5가 주어진 경우 가능한 쌍은 1,4와 2,3이 있다. 두 수는 항상 달라야 한다. 즉, 3,3은 올바른 쌍이 아니다. 또, 첫 번째 수가 두 번째 수보다 작아야 한다.
출력하는 쌍은 항상 사전순으로 출력해야 한다. 즉, 각 쌍의 작은 수로 비교를 해야 한다. 예를 들어 1,5는 2,4보다 사전순으로 앞선다.
입력 : 첫째 줄에 테스트 케이스의 수 (< 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다.
출력 : 각 테스트 케이스마다 n을 만드는 쌍을 사전순으로 출력한다. n을 만드는 쌍이 없는 경우에는 아무것도 출력하지 않는다.
예제 출력 형식을 참고해 출력한다.
출력 형식 : 정확한 출력 형식은 제출에서 언어를 Java로 설정하면 확인할 수 있다.
*/


// let fs = require('fs');
// let input = fs.readFileSync('/dev/stdin').toString().split('\n');

// let i = 0;

// for(i=0; i<input.length-1; i++){
//     let num = input[i];
//     for(a=1; a<num; a++){
//     arr = [];
//     arr.push([a, num-a]);
//     }
//    result = `Pairs for ${num}: ${ }`;
// }

// console.console.log(result);

// let fs = require('fs');
// let input = fs.readFileSync('/dev/stdin').toString().split('\n');


let inputs = "4\n2\n3\n4\n5";
let input = inputs.trim().split("\n").map(x => +x);
// map(x => +x) 여기서 '+'는 숫자 연산자로 바꿔주게 된다. 여기서 map(Number)와 뭐가 다른건지 궁금! -> '결론은 같다!'

let result = "";

for(let i=1; i<input.length; i++){
    const num = input[i];

    let arr = [];

    for(let a=1; a<num-a; a++){
    arr.push([a, num-a]);
    }
    
   result = `Pairs for ${num}: ${arr.map(x => x.join(" ")).join(', ')}`;
   console.log(result);
}

💡마치며

5217번 쌍의 합 문제는 결국 혼자 풀지 못하여 스터디 멤버 현재님의 답을 보기도 하고 모르는 것을 물어보면서 결국 이해한 문제이다. arr.map()을 제대로 배운 것 같아 다행스런 마음이다.

profile
RN App Developer

0개의 댓글