[BaekJoon] 1330번 - 두 수 비교하기 (java)

1. 문제

👉 문제 바로가기

- 조건

시간 제한 메모리 제한
1초 512MB


- 문제

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

- 입력

첫째 줄에 A와 B가 주어진다. A와 B는 공백 한 칸으로 구분되어져 있다.

- 출력

첫째 줄에 다음 세 가지 중 하나를 출력한다.
- A가 B보다 큰 경우에는 '>'를 출력한다.
- A가 B보다 작은 경우에는 '<'를 출력한다.
- A와 B가 같은 경우에는 '=='를 출력한다.

- 제한

-10,000 ≤ A, B ≤ 10,000

- 예제

  입력      출력  
1   2 <
10   2 >
5   5 ==





2. 풀이

'>' , '<' , '==' 3가지 중 1개를 출력하기 위해 조건문 if를 사용한다.

또한 if 대신 삼항 연산자 를 사용해서 조건문을 한 줄로 줄이는 방법도 설명한다.




2가지 입력방법을 사용해서 결과를 출력한다.

  1. Scanner 클래스
  2. BufferedReader 클래스


- 1. Scanner 클래스 사용

import java.util.Scanner;

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

        int A = sc.nextInt();
        int B = sc.nextInt();
        
        if(A > B){
            System.out.println(">");
        }else if(A < B){
            System.out.println("<");
        }else{
            System.out.println("==");
        }
    }
}

위와같이 객체를 생성할 때, Scanner(System.in) 에서 System.in 은 입력한 값을 Byte 단위로 읽는 것을 뜻한다.

if 조건문은 ( ) 안에 조건을 명시하고 { } 안에 조건에 따른 결과를 명시한다.
else if 를 사용해 2개 이상의 조건을 작성하고, 마지막은 else 를 사용해 위의 모든 조건이 false 일 때 실행된다.

Scanner에 대해 더 자세히 알고싶다면 여기를 눌러보자




- 2. BufferedReader 클래스 사용

BufferedReader는 readLine() 메서드를 사용해 한 행을 전부 읽는다.
이를 공백단위로 분리해야 하는데, 두가지 분리 방법으로 문제를 풀어보자.



     ① StringTokenizer 클래스를 사용하여 분리해주는 방법
     ② split() 을 사용하는 방법



① StringTokenizer 클래스를 이용

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        
        if(A > B) System.out.println(">");
        else if(A < B) System.out.println("<");
        else System.out.println("==");
    }
}

str.nextToken()은 한 줄로 받은 데이터를 공백 단위로 끊어 문자열로 반환하기 때문에 Integer.parseInt()을 사용해 int형으로 변환시켜준다.

if 조건문의 연산이 1줄인 경우, { }를 생략할 수 있다.




② split() 을 사용

여기서 삼항 연산자도 함께 사용해보자.

변수 = (조건문) ? (true 인 경우 연산) : (false 인 경우 연산)

if 조건문보다 코드도 짧고 한 줄에 표현할 수 있어 가독성도 좋다.
조건이 2개 이상일 경우, 연산 위치에 또 다른 삼항 연산자를 쓸 수 있다.


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String[] arr = br.readLine().split(" ");
        
        int A = Integer.parseInt(arr[0]);
        int B = Integer.parseInt(arr[1]);
        
        String str = (A > B) ? ">" : ((A < B>) ? "<" : "=="); 
    }
}

br.readLine() 을 통해 읽어온 문자열을 split(" ") 하여 공백 단위로 나눠준 뒤 String 배열에 순서대로 저장한다.

Integer.parseInt()을 사용해 string 배열에 저장된 값을 각각 int형으로 변환시켜준다.

첫번째 조건 A > B 가 true 이면 > 를 변수 str 에 저장하고, false 면 다시 삼항 연산자로 체크한다.
두번째 조건 A < B 가 true 이면 < 를 저장하고, false 면 == 를 저장한다.

BufferedReader 클래스에 대해 더 알아보고 싶으면 여기를 클릭하면 된다.





3. Scanner VS BufferedReader 성능 비교

image

입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.





관련 페이지




Categories:

Updated:

Leave a comment