안녕하세요

[node.js] 백준 조건문 단계 (자바스크립트) 1330 ~ 본문

백준 자바스크립트

[node.js] 백준 조건문 단계 (자바스크립트) 1330 ~

sakuraop 2022. 5. 3. 00:26

클론코딩을 하면서 부족한 자바스크립트 문법은 백준을 통해서 공부합시다.

초보입니다. 코드 설명은 "참고만" 해주세요.

https://www.acmicpc.net/step/4

 

조건문 단계

점이 어느 사분면에 있는지 알아내는 문제

www.acmicpc.net


1330 두 수 비교하기

두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

1 2

첫째 줄에 다음 세 가지 중 하나를 출력한다.

  • A가 B보다 큰 경우에는 '>'를 출력한다.
  • A가 B보다 작은 경우에는 '<'를 출력한다.
  • A와 B가 같은 경우에는 '=='를 출력한다.

결과

<

제출한 답

const [a, b] = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(Number)

if (a > b) {
    console.log(">")
} else if (a < b) {
    console.log("<")
} else {
    console.log("==")
}

 

  • require('fs') : file system 모듈을 불러옵니다.
  • .readFileSync('/dev/stdin') : 데이터가 저장된 위치에 접근하여 내용을 읽어옵니다.
  • .toString() : 백준은 자바스크립트에서 input을 받기 위해 str 형변환을 해주어야 한다고 합니다.
  • .split(' ') : 입력받은 데이터를 ' ' 공백으로 구분하여 저장합니다. ( ['1', '2'] )
  • [a, b] : a 변수는 1로, b 변수는 2로 언패킹 합니다.
  • .map(Number) : str(문자열)에서 int(정수형) 로 형변환을 해 대소비교를 할 수 있도록 합니다.

9498 시험 성적

시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오. 시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

100

결과

A

제출한 답

const score = require('fs').readFileSync('/dev/stdin')

if (score>=90){
    console.log('A');
} else if (score>=80){
    console.log('B');
} else if (score>=70){
    console.log('C');
} else if (score>=60){
    console.log('D');
} else{
    console.log('F');
}

 

  • 대소비교는 >=, <=, ==, >, <, 등이 있습니다.

2753 윤년

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.

2000

결과

1

제출한 답

const inputYear = require('fs').readFileSync("/dev/stdin")

if ((inputYear % 4 == 0 && inputYear % 100 != 0) || inputYear % 400 == 0){
    console.log(1)
} else {
    console.log(0)
}

 

  • % : 나머지를 구합니다
  • && : 둘 이상의 조건이 모두 true여야 합니다.
  • != : 일치하지 않으면 true를 반환합니다.
  • || : 하나의 조건이라도 true여야 합니다.

14681 사분면 고르기

첫 줄에는 정수 x가 주어진다. (−1000 ≤ x ≤ 1000; x ≠ 0) 다음 줄에는 정수 y가 주어진다. (−1000 ≤ y ≤ 1000; y ≠ 0)

12
5

결과

1

제출한 답

const rl = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});

let input = [];

rl.on('line', function (line) {
  input.push(line)
}) .on('close', function () {

const [x, y] = input

if (x > 0 && y > 0) {
    console.log(1)
} else if (x < 0 && y > 0) {
    console.log(2)
} else if (x < 0 && y < 0) {
    console.log(3)
} else {
    console.log(4)
}
  process.exit();
});

 

14681번 문제의 경우에는 fs 를 이용하였더니 런타임 에러 (EACCES) 가 발생하였습니다. readline을 이용해야 합니다. 

  • require('readline').createInterface : input을 받기 위한 function 
  • let input = [] : input을 받아 저장할 리스트를 만듭니다.
  • rl.on('line', function (line) {  input.push(line) }) : line에 테스트케이스를 받게 됩니다. 그리고
    input.push(line) : input 리스트에 push합니다.
  • .on('close', function () { }); : { } 안에 코드를 작성합니다.

2884 알람 시계

첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 놓은 알람 시간 H시 M분을 의미한다. 입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.

알람을 설정하면 원하는 시간보다 45분 빠른 시간으로 설정되도록 프로그램을 작성하시오. 아래와 같이 입력

0 30

결과

23 45

제출한 답

const [h, m] = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(Number)

if (h == 0) {
    if (m < 45) {
        console.log(`23 ${m+15}`)
    } else {
        console.log(`0 ${m-45}`)
    }
} else if ( h >= 1 ){
    if (m < 45) {
        console.log(`${h-1} ${m+15}`)
    } else {
        console.log(`${h} ${m-45}`)
    }
}

 

  • 0시 일때는 "23시" 또는 "0시"가 되도록, 0시가 아닐때는 "h-1시" 또는 "h시"가 되는 조건으로 나누었습니다. 

2525 오븐 시계

첫 번째 줄에는 현재 시각을, 두 번째 줄에는 소요되는는 시간을 아래와 같이 입력받습니다.

14 30
20

결과를 아래와 같이 출력하면 됩니다.

14 50

제출한 답1

var [currentTime, cookingTime] = require('fs').readFileSync('/dev/stdin').toString().split('\n')
const [hour, minute] = currentTime.split(' ').map(Number)
var cookingTime = Number(cookingTime)

const totalMinute = hour*60 + minute + cookingTime
const resultHour = Math.floor((totalMinute)/60)
const resultMinute = totalMinute%60

if (resultHour >= 24 ){
    console.log(`${resultHour-24} ${resultMinute}`)
} else {
    console.log(`${resultHour} ${resultMinute}`)
}

 

  • .split() : 입력을 "\n" 과 " " 로 두 번 받아야 했습니다.
  • 조건문을 활용하여 요리시간을 합한 시각이 24시를 넘어갔을 때는 0시부터 표기되도록 결과 시간에 -24를 해줍니다.

2480 주사위 세개

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

  1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 
  2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 
  3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.  

3개의 수를 입력받고 위의 조건에 따라서 상금을 구하는 프로그램을 작성하시오

3 3 6

결과

1300

제출한 답

const dice = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(Number)
const sortDice = dice.sort()
const [d1, d2, d3] = sortDice

if ( d1 == d2 && d2 == d3 ) {
    console.log(10000+d1*1000)
} else if (d1 != d2 && d2 != d3 && d3 != d1) {
    console.log(d3*100)
} else if ( d1 == d2 || d2 == d3 )
    console.log(1000+d2*100)
  else if ( d3 == d1 ) {
    console.log(1000+d1*100)
}

 

  • 좀 더 간단하게 할 수 있을 것 같은 느낌도 듭니다.

조건문 단계는 여기까지 입니다.