728x90
반응형

백준알고리즘

- Bronze 4 -

 #14681. 사분면 고르기 by JAVA and node.js 

 


 

문제

출처: https://www.acmicpc.net/problem/14681 

 


 

접근 방법

간단한 if문 연산문제이다.

x, y의 부호에 따라 출력해주면 된다.

  • x>0, y>0 : 1사분면
  • x<0, y>0 : 2사분면
  • x<0, y<0 : 3사분면
  • x>0, y<0 : 4사분면

 

풀이

▶ JAVA

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int x = scan.nextInt();
        int y = scan.nextInt();
        scan.close();

        if(x > 0)
            System.out.println(y > 0 ? 1 : 4);
        else
            System.out.println(y > 0 ? 2 : 3);
    }
}

 

▶ node.js

var readline = require('readline');

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

var input = [];

rl.on('line', function(line){
    input.push(line);
//  rl.close(); // 작성 시 오답
}).on('close', function(){
    var x = input[0];
    var y = input[1];
    if(x > 0)
        console.log(y > 0 ? 1 : 4);
    else
        console.log(y > 0 ? 2 : 3);
    process.exit();
});

 

#14065. Gorivo처럼 이 문제도 readline을 사용해야 한다. (fs 모듈 사용 시 런타임에러 발생)

Gorivo 문제와 다른 점이 있다면, Gorivo는 입력값이 한 줄이어서 'line' 안에서 출력까지 다 했지만,

이 문제에서는 입력값이 두 줄에 나눠서 들어오기 때문에 배열 변수를 먼저 선언한 후, .push(line)을 통해 값을 넣어준 뒤 'close' 부분에서 출력을 해준다.

 


 

결과

fs모듈만 사용하다가 readline을 써보려니 조금 어색하지만 그래도 Gorivo문제때보단 익숙해진 느낌..


 

 

 

 

 

End.

heisely's 괴발개발 개발일지

 

728x90
반응형
728x90
반응형

백준알고리즘

- Bronze 4 -

 #14623. 감정이입 by JAVA and node.js 

 


 

문제

출처: https://www.acmicpc.net/problem/14623 

 


 

접근 방법

30자리 이하의 이진수이므로 최대길이의 이진수를 십진수로 환산하면 int의 범위를 벗어난다.

이진수를 입력받을 떄에는 String에 저장해야하므로, long형 변수를 선언해서 Long.parseLong()을 이용하여 이진수를 십진수로 저장한 후, 다시 Long.toBinaryString()을 이용해 계산값을 이진수로 변환하여 출력하면 된다.

 


 

풀이

▶ JAVA

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String b1 = scan.next(); // 이진수 1
        String b2 = scan.next(); // 이진수 2
        scan.close();

        long b1n = Long.parseLong(b1, 2); // b1을 long형 십진수로 형변환
        long b2n = Long.parseLong(b2, 2); // b2를 long형 십진수로 형변환

        String multiply = Long.toBinaryString(b1n * b2n); // 곱한 값을 이진수로 변환

        System.out.println(multiply);
    }
}

 

▶ node.js

var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().trim().split('\n').map(Number);

var b1 = BigInt(parseInt(input[0], 2));
var b2 = BigInt(parseInt(input[1], 2));

var answer = b1 * b2;
console.log(answer.toString(2));

node.js의 경우 BigInt와 toString(2)를 이용했다.


 

결과

 


 

 

 

 

 

End.

heisely's 괴발개발 개발일지

 

728x90
반응형
728x90
반응형

백준알고리즘

- Bronze 4 -

 #14470. 전자레인지 by JAVA and node.js 

 


 

문제

출처: https://www.acmicpc.net/problem/14470 

 


 

접근 방법

if - else if - else 문으로 풀 수 있는 문제이다.

입력받은 A값이 0보다 작을 때에는 A℃~0℃ 가열시간 + 해동시간 + 0℃ ~ B℃ 가열시간을 구하면 되고,

입력받은 A값이 0보다 클 때에는 A℃ ~ B℃ 가열시간만 구하면 된다.

 


 

풀이

▶ JAVA

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int a = scan.nextInt(); // 초기온도
        int b = scan.nextInt(); // 목표온도
        int c = scan.nextInt(); // 얼어있을 때 섭씨 1도당 가열시간
        int d = scan.nextInt(); // 해동시간
        int e = scan.nextInt(); // 얼어있지 않을 때 섭씨 1도당 가열시간
        scan.close();

        if(a < 0) { // 얼어있는 상태일 때
            System.out.println(-a * c + d + b * e);
        } else { // 얼어있지 않은 상태일 때
            System.out.println((b-a) * e);
        }
    }
}

 

▶ node.js

var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().trim().split('\n').map(Number);

var a = input[0]; // 초기온도
var b = input[1]; // 목표온도
var c = input[2]; // 얼어있을 때 섭씨 1도당 가열시간
var d = input[3]; // 해동시간
var e = input[4]; // 녹아있을 때 섭씨 1도당 가열시간

if(a < 0){
    console.log(-a * c + d + b * e);
} else {
    console.log((b - a) * e);
}

 


 

결과

 


 

 

 

 

 

End.

heisely's 괴발개발 개발일지

 

728x90
반응형
728x90
반응형

백준알고리즘

- Bronze 4 -

 #14264. 정육각형과 삼각형 by JAVA and node.js 

 


 

문제

출처: https://www.acmicpc.net/problem/14264 

 


 

접근 방법

 

정육각형 한 각은 120˚이고, S의 최대값은 정삼각형이 그려졌을 때이다.

한 변의 길이가 L로 주어지고, 한 꼭짓점에서 대각선으로 수선의 발을 내리면 한 각은 60˚, 다른 한 각은 자연스럽게 30˚가 된다. (∵ 이등변 삼각형)

30˚ 60˚ 90˚는 삼각비가 존재하는 삼각형으로, 변의 길이가 1 : √3 : 2 의 비율을 가진다.

따라서 가장 짧은 변(여기서는 높이 역할)의 길이는 (1/2)L이고, 가장 긴 변(여기서는 가로의 길이의 절반)은 (√3/2)L이 되므로 S는 (√3/4)*L*L 이 된다.


 

풀이

▶ JAVA

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 실수형이 나와야 하므로 double로 받는다.
        double l = scan.nextDouble();
        scan.close();

        // Math.sqrt(3) 때문에 출력은 실수로 나오지만,,
        System.out.println(l * l * Math.sqrt(3) / 4);
    }
}

 

▶ node.js

var fs = require('fs');
var l = fs.readFileSync('/dev/stdin').toString().trim();

// l * l 대신 Math.pow를 사용해보았다.
console.log(Math.pow(l,2) * Math.sqrt(3) / 4);

 


 

결과

 


 

 

 

 

 

End.

heisely's 괴발개발 개발일지

 

728x90
반응형
728x90
반응형

백준알고리즘

- Bronze 4 -

 #14173. Square Pasture by JAVA and node.js 

 


 

문제

출처: https://www.acmicpc.net/problem/14173

번역: https://www.acmicpc.net/board/view/86038

 

글 읽기 - (번역) 14173 - 정사각형 초원

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net


 

접근 방법

두 직사각형을 포함하는 정사각형의 넓이를 구하는 문제이다.

첫 번째 줄과 두 번째 줄에 각각 한 직사각형의 좌하단 (x,y) 좌표와 우상단 (x,y) 좌표가 주어지고,

두 직사각형의 좌하단의 x, y좌표는 우상단 x, y 좌표보다 항상 작음과 두 직사각형이 겹치지 않음이 보장된다.

 

따라서 두 직사각형의 x좌표와 y좌표들 중 가장 큰 값과 가장 작은 값을 뺀 값 중 큰 값이 이 두 직사각형을 모두 포함하는 정사각형의 한 변의 길이가 된다.

 

예제입력을 보면 (6,6), (8,8) 과 (1,8), (4,9)가 주어진다.

입력 순서대로 x = [6, 8, 1, 4]가 되고, y = [6, 8, 8, 9]가 된다.

두 직사각형을 모두 포함하는 사각형은 적어도 x=1과 x=8을 포함해야하고, y=6, y=9를 포함해야한다.

즉, (1,6)과 (8,9)를 포함하는 정사각형이어야 한다.

(1,6)과 (8,9)를 각각 좌하단, 우상단의 좌표로 보면, 가로가 7이고 세로가 3인 직사각형이 된다.

이 직사각형도 포함하는 정사각형의 한 변의 최소 길이는 7이 되어야 한다.

따라서 출력은 7 * 7 = 49가 나온다.

 

가장 큰 값과 작은 값을 빼기 위해 Arrays.sort()를 이용하고, 큰 값을 찾기 위해 Math.max()를 이용했다.

 


 

풀이

▶ JAVA

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[] x = new int[4];
        int[] y = new int[4];

        for(int i=0; i<8; i++) {
            if(i % 2 == 0) {
                x[i / 2] = scan.nextInt(); // x좌표 입력
            } else {
                y[i / 2] = scan.nextInt(); // y좌표 입력
            }
        }
        scan.close();

        // 오름차순으로 정렬
        Arrays.sort(x);
        Arrays.sort(y);

        // 정사각형의 한 변의 길이
        int a = Math.max(x[3]-x[0], y[3]-y[0]);

        // 정사각형의 넓이 출력
        System.out.println(a * a);
    }
}

 

▶ node.js

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

// 첫 번째 직사각형의 좌표
var square1 = input[0].toString().trim().split(' ').map(v => +v);
// 두 번째 직사각형의 좌표
var square2 = input[1].toString().trim().split(' ').map(v => +v);
var x = []; // x좌표
var y = []; // y좌표

for(var i=0; i<4; i++){
    if(i % 2 == 0){ // 배열번호: 0, 2. 즉 x좌표들
        // 배열 x에 넣어줌
        x.push(square1[i]);
        x.push(square2[i]);
    } else { // 배열번호: 1, 3. 즉 y좌표들
        // 배열 y에 넣어줌
        y.push(square1[i]);
        y.push(square2[i]);
    }
        
}

// 배열 오름차순 정렬
x.sort((a,b) => a-b);
y.sort((a,b) => a-b);

// 정사각형의 한 변의 길이
var a = Math.max(x[3]-x[0], y[3]-y[0]);

// 정사각형의 넓이 출력
console.log(a * a);

 


 

결과

 


 

 

 

 

 

End.

heisely's 괴발개발 개발일지

 

728x90
반응형
728x90
반응형

백준알고리즘

- Bronze 4 -

 #14065. Gorivo by JAVA and node.js 

 


 

문제

출처: https://www.acmicpc.net/problem/14065 

번역: https://www.acmicpc.net/board/view/85908

 

글 읽기 - (번역) 14065 - 연료

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net


 

접근 방법

1갤런 = 3.785411784리터

1마일 = 1609.344 미터

입력: 1갤런 당 가는 마일의 수 (= x마일 이라고 가정)

출력: 100km당 몇 L를 소비하는가?

 

1갤런 당 x마일

=> 3.785411784리터 당 x * 1609.344 미터 이동

=> 1리터 당 x * 1609.344 / 3.785411784 미터 이동

=> 1리터당 (x * 1609.344 / 3.785411784) / 1000 키로미터 이동

=> 100 키로미터 당 소비되는 연료(L)의 양을 y라고 한다면, y = 100 / ((x * 1609.344 / 3.785411784) / 1000)

( 1L : (x * 1609.344 / 3.785411784) / 1000 km = yL : 100km 이용)

 


 

풀이

▶ JAVA

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        double x = scan.nextDouble(); // 1갤런 당 이동할 수 있는 거리(마일)
        scan.close();

        double m = x * 1609.344 / 3.785411784; // 1L 당 이동할 수 있는 거리(미터)
        System.out.println(100 /(m/1000)); // 100km를 이동하는데 소모되는 연료(L)
    }
}

 

▶ node.js

평소대로 fs.readFileSync('/dev/stdin')을 사용해서 풀었는데 "런타임 에러(EACCES)"가 발생했다.

게시판 공지에 보니 1년전 쯤 fs말고 readline을 사용하라고 한다.

 

readline에 대한 내용은 아래 블로그 참고

https://velog.io/@exploit017/%EB%B0%B1%EC%A4%80Node.js-Node.js-%EC%9E%85%EB%A0%A5-%EB%B0%9B%EA%B8%B0

 

[백준/Node.js] Node.js 입력 받기

일반적으로 JS에서는 prompt로 입력을 받았으나, 백준에서는 런타임 오류가 발생한다.검색해보니 Node.js의 realine 모듈을 import해서 사용해야했다.소스 코드는 다음과 같다.console.log(answer);에 의해 입

velog.io

// 기존: var fs = require('fs');
var readline = require('readline');

// 기존: var input = fs.readFileSync('/dev/stdin').toString().trim()....
var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// line에 입력값이 들어간다. (문자열반환)
rl.on('line', function(line){
    // +line: 문자열로 들어온 입력값을 숫자로 반환
    var m = +line * 1609.344 / 3.785411784;
    
    // 출력
    console.log(100 / (m / 1000));

    rl.close();
}).on("close", function(){
    process.exit();
});

 


 

결과

 


 

 

 

 

 

End.

heisely's 괴발개발 개발일지

 

728x90
반응형
728x90
반응형

백준알고리즘

- Bronze 4 -

 #14038. Tournament Selection by JAVA and node.js 

 


 

문제

출처: https://www.acmicpc.net/problem/14038

번역: https://www.acmicpc.net/board/view/86000

 

글 읽기 - (번역) 14038 - 대회

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net


 

접근 방법

총 6번의 입력을 받고, W개수에 따라 값을 출력하면 된다.

따라서 W의 개수를 세어줄 변수 wins를 선언 및 0으로 초기화 한 다음, for문을 통해 입력을 받으면서 입력값이 W이면 wins를 하나 증가시키고서 switch문을 통해 wins의 값에 따라 결과값을 출력하면 된다.

 


 

풀이

▶ JAVA

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int wins = 0;
        for(int i=0; i<6; i++) {
            String input = scan.next();
            if("W".equals(input)) 
                wins++;
        }
        scan.close();

        switch(wins) {
            case 5: case 6:
                System.out.println(1);
                break;
            case 4: case 3:
                System.out.println(2);
                break;
            case 2: case 1:
                System.out.println(3);
                break;
            default:
                System.out.println(-1);
                break;
        }
    }
}

 

▶ node.js

var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
var wins = 0;

for(var i=0; i<6; i++){
    if(input[i].replace('\r','') == 'W')
        wins++;
}

switch(wins) {
    case 5: case 6:
        console.log(1);
        break;
    case 4: case 3:
        console.log(2);
        break;
    case 2: case 1:
        console.log(3);
        break;
    default:
        console.log(-1);
        break;
}

node.js의 경우 \n으로 자르면 input = ['W\r', 'L\r', ...]의 형식으로 들어간다.

따라서 replace('\r', '')을 이용하여 \r을 제거해준 뒤 'W'와 같은 지 확인해야한다.


 

결과

 


 

 

 

 

 

End.

heisely's 괴발개발 개발일지

 

728x90
반응형
728x90
반응형

백준알고리즘

- Bronze 4 -

 #13985. Equality by JAVA and node.js 

 


 

문제

출처: https://www.acmicpc.net/problem/13985 

번역: https://www.acmicpc.net/board/view/86040


 

접근 방법

JAVA에서 Scanner를 통해 입력을 받으면 공백을 기준으로 따로 받는다.

따라서 공백 포함 9자를 입력받는다 하더라도, 공백을 제외하면 총 5번 입력을 받게 된다.

입력값에 문자와 숫자가 섞여있으므로 크기가 5인 String 배열을 선언해 for문을 통해 입력받은 뒤,

.charAt(0) - '0' 을 이용해 숫자만 따로 빼내어 출력했다.

 

node.js의 경우에는 split(' ')을 통해 입력을 받고 숫자를 parseInt로 형변환해준 뒤 출력했다.

 

추가** JAVA에서 배열값을 Integer.parseInt()로 형변환 해줘도 된다.

 


 

풀이

▶ JAVA

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String[] arr = new String[5];
        for(int i =0; i<5; i++) {
            arr[i] = scan.next();
        }
        scan.close();

        int a = arr[0].charAt(0) - '0';
        int b = arr[2].charAt(0) - '0';
        int c = arr[4].charAt(0) - '0';
        System.out.println(a+b == c ? "YES" : "NO");

    }
}
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String[] arr = new String[5];
        for(int i =0; i<5; i++) {
            arr[i] = scan.next();
        }
        scan.close();

        int a = Integer.parseInt(arr[0]);
        int b = Integer.parseInt(arr[2]);
        int c = Integer.parseInt(arr[4]);
        System.out.println(a+b == c ? "YES" : "NO");

    }
}

 

▶ node.js

var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');

var a = parseInt(input[0]);
var b = parseInt(input[2]);
var c = parseInt(input[4]);

console.log(a + b == c ? 'YES' : 'NO');

 


 

결과

 


 

 

 

 

 

End.

heisely's 괴발개발 개발일지

 

728x90
반응형

+ Recent posts