문제 출처 사이트 : https://www.acmicpc.net/problem/2884

문제


상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.

상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.

이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다.

바로 "45분 일찍 알람 설정하기"이다.

이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.

현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.

입력


첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 놓은 알람 시간 H시 M분을 의미한다.

입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.

출력


첫째 줄에 상근이가 창영이의 방법을 사용할 때, 설정해야 하는 알람 시간을 출력한다. (입력과 같은 형태로 출력하면 된다.)

작성코드


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int hour = sc.nextInt();
        int minute = sc.nextInt();

        sc.close();

        secondNum = secondNum - 45;

        if(minute < 0) {
            minute = 60 + minute;
            hour --;
        }
        if(hour < 0) {
            hour = 23;
        }
        System.out.println(hour + " " + minute);

    }
}

문제 풀이 과정


ex ) 입력 받은 값 0 15

  1. 입력받은 분(minute) 에 45를 뺍니다. ( 15 - 45 = -30 )
  2. 현재 분(minute-45) 값이 음수 일 경우 60 에서 현재의 값을 더합니다. ( 60 + (-30) )
  3. 입력 받은 시(hour)에서 -1을 합니다.
  4. 현재 시(hour-1) 값이 음수 일 경우 hour 는 23의 값을 할당 받습니다.

'Java > 백준 알고리즘' 카테고리의 다른 글

[BAEKJOON] 14681 사분면 고르기  (0) 2021.10.03
[BAEKJOON] 2588 곱셈  (0) 2021.10.02

문제 출처 사이트 : https://www.acmicpc.net/problem/14681

문제


흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다.

예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.

점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.

입력


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

출력


점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.

작성코드


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int firstNum = sc.nextInt();
        int secondNum = sc.nextInt();
        
        sc.close();

        int firstNumCheck = Integer.signum(firstNum);
        int secondNumCheck = Integer.signum(secondNum);

        if(firstNumCheck == 1 && secondNumCheck == 1) System.out.println("1");
        if(firstNumCheck == -1 && secondNumCheck == 1) System.out.println("2");
        if(firstNumCheck == -1 && secondNumCheck == -1) System.out.println("3");
        if(firstNumCheck == 1 && secondNumCheck == -1) System.out.println("4");

    }
}

문제 풀이 과정


양수인지 음수인지에 대해 체크 하기 위한 방법 중 가장 쉬운것은 0 과 비교 하는 것이 가장 편리합니다.

그런데 Java 언어 측에서 양수와 음수를 체크 해주는 Method가 혹시 있을까 해서 찾아봤습니다. Math.signum() , Intger.signum()을 확인 할 수 있었고, 이를 활용해서 문제를 풀었습니다.

Math.signum() 은 float 과 double 값에만 작동합니다.
Return : 인수의 부호 함수를 반환합니다. 인수가 0이면 0, 인수가 0보다 크면 1.0, 인수가 0보다 작으면 -1.0입니다.

Intger.signum() 은 int 형식에서 작동합니다.
Return : 지정된 값이 음수이면 반환 값은 -1, 지정된 값이 0이면 0, 지정된 값이 양수이면 1입니다.

참고사이트


 

https://stackoverflow.com/questions/19766051/java-check-if-input-is-a-positive-integer-negative-integer-natural-number-an

 

Java - Check if input is a positive integer, negative integer, natural number and so on.

Is there any in-built method in Java where you can find the user input's type whether it is positive, or negative and so on? The code below doesn't work. I am trying to find a way to input any in-b...

stackoverflow.com

https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#signum(int) 

 

Integer (Java Platform SE 7 )

Returns the value obtained by rotating the two's complement binary representation of the specified int value left by the specified number of bits. (Bits shifted out of the left hand, or high-order, side reenter on the right, or low-order.) Note that left r

docs.oracle.com

https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#signum%28double%29

'Java > 백준 알고리즘' 카테고리의 다른 글

[BAEKJOON] 2884 알람 시계  (0) 2021.10.03
[BAEKJOON] 2588 곱셈  (0) 2021.10.02

문제 출처 사이트 : https://www.acmicpc.net/problem/2588

문제


(세자리 수) X (세자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1) 과 (2)위치에 들어갈 세 자리 자연수가 주어질 때, (3), (4), (5), (6) 위치에 들어갈 값을 구하는 프로그램을 작성하시오.

입력


첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

출력


첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

작성코드


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int firstNum = sc.nextInt();
        String secondNum = sc.next();
        
        sc.close();

        for(int i = secondNum .length()-1; i >= 0; i--) {
            int num = Character.getNumericValue(secondNum .charAt(i));
            System.out.println(firstNum  * num);            
        }

        System.out.println(firstNum  * Integer.parseInt(secondNum));
    }
}

문제 풀이 과정


문제는 (세자리 수) X (세자리 수) 이지만, 그 이상의 숫자를 받았을 경우에도 돌아갈 수 있는 프로그램을 작성했습니다.

  1. 두번째 숫자는 String 객체로 데이터를 입력 받습니다.
  2. 입력받은 데이터를 charAt으로 저장된 문자열 중 한글자씩 char 타입으로 변환합니다.
  3. char 타입은 ASCII Code 기반이기 때문에 int 형식으로 캐스팅 할 경우 0 = 48 부터 시작 합니다. 그래서 캐스팅 할때 '0' 또는 48을 뺴주는 형태로 캐스팅을 하는데 이를 보다 편리하게 Character.getNumericValue() 메소드를 이용하여 캐스팅 해줍니다.
  4. 이 과정을 for 문을 통해 String의 마지막 인덱스 값부터 0까지 반복합니다.

'Java > 백준 알고리즘' 카테고리의 다른 글

[BAEKJOON] 2884 알람 시계  (0) 2021.10.03
[BAEKJOON] 14681 사분면 고르기  (0) 2021.10.03

+ Recent posts