SW 공부노트

[백준] 단계별로 풀어보기 2. 조건문 본문

백준풀이

[백준] 단계별로 풀어보기 2. 조건문

요빈 2022. 7. 1. 19:57

두 번째 단계인 조건문!

단계별로 풀어보기 2. 조건문(https://www.acmicpc.net/step/4)

2단계는 총 7문제로 구성되어 있다.


1. 두 수 비교하기(1330)

첫 번째 문제는 두 수를 입력받고 두 수를 비교해 부등호를 출력하는 문제이다.
이 문제에서는 Scanner를 통해 사용자에게 입력을 받았다.
if 문을 통해 값 비교 후 상황에 맞는 부등호를 출력하였다.

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int a,b;

        a = sc.nextInt();
        b = sc.nextInt();

        if(a > b)
            System.out.print(">");
        else if(a < b)
            System.out.print("<");
        else
            System.out.print("==");

        sc.close();
    }
}

2. 시험 성적(9498)

두 번째 문제는 시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하는 문제이다.
점수 범위를 구분하는 조건문을 작성한 후 범위에 맞는 등급을 출력하였다.

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int a;

        a = sc.nextInt();

        if(a>=90 && a<= 100)
            System.out.print("A");
        else if(a>= 80 && a < 90)
            System.out.print("B");
        else if(a>= 70 && a< 80)
            System.out.print("C");
        else if(a>= 60 && a< 70)
            System.out.print("D");
        else
            System.out.print("F");

        sc.close();
    }
}

3. 윤년(2753)

세 번째 문제는 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 문제이다.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
윤년일 때의 조건을 작성하는 것이 이 문제의 핵심인 듯하다.

조건은 크게 두 파트로 나눌 수 있다.

1) 연도가 4의 배수이면서 : a % 4 == 0 &&
2) 100의 배수가 아닐 때 또는 400의 배수일 때 : a % 100 != 0 || a % 400 == 0

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int a;

        a = sc.nextInt();

        if(a%4 == 0 && ( a%100 != 0 || a%400 == 0))
            System.out.print("1");
        else
            System.out.print("0");

        sc.close();
    }
}

4. 사분면 고르기(14681)

네 번째 문제는 주어진 점이 어느 사분면에 속하는지 알아내는 문제이다.
좌표를 입력하고 좌표에 맞는 사분면을 출력하면 된다.

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int a, b;

        a = sc.nextInt();
        b = sc.nextInt();

        if(a>0 && b >0)
            System.out.print("1");
        else if(a<0 && b >0)
            System.out.print("2");
        else if(a<0 && b <0)
            System.out.print("3");
        else if(a>0 && b <0)
            System.out.print("4");

        sc.close();
    }
}

5. 알람 시계(2884)

이번 문제는 입력받은 시간에서 45분 앞서는 시간을 출력하는 문제이다.
a는 hour, b는 minute를 의미한다.
현재 시간이 45분을 넘었는지 확인하는 조건문을 통해 각 상황을 구분해 작성하였다.
45분을 넘었을 경우에는 hour는 건들지 않고 minute에서만 45를 빼주었고,
45분을 넘지 않았을 경우에는 hour - 1, minute - 45 + 60 계산을 해주었다.
추가적으로 시간이 00시 일 경우에는 hour = 23으로 대입해주었다.
더 이해하기 쉽게 작성해야 했는데 너무 대충 작성한 것 같아 아쉽다.
다음엔 더 명확하게 작성해야지!

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int a, b;

        a = sc.nextInt();
        b = sc.nextInt();

        if(b-45<0) {
            if(a == 0)
                a=23;
            else
                a = a-1;
            b = 60 +(b-45);
        }else
            b = b-45;

        System.out.print(a +" " + b);

        sc.close();
    }
}

6. 오븐 시계(2525)

5번 문제에서 더 발전된 형태의 문제로 현재 시간과 타이머값을 입력하면 현재 시간에서 타이머값을 더한 시간을 출력하는 문제이다.
타이머값은 요리하는 데 필요한 시간으로 분 단위로 입력한다.
따라서 타이머값을 60으로 나누어 시간값과 분값을 구분해 더해주었다.

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);

        int h = sc.nextInt();
        int m = sc.nextInt();
        int t = sc.nextInt();

        int hour = t / 60;
        int min = t % 60;

        if(m + min >= 60) {
            m = m + min - 60;
            h = h + hour + 1;
        }else {
            h = h + hour;
            m = m + min;
        }

        if(h >= 24)
            h = h - 24;

        System.out.print(h + " " + m);
        sc.close();
    }
}

7. 주사위 세개(2480)

마지막 문제는 주사위를 던져 다음 규칙에 따라 상금을 계산하는 문제이다.

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

세 값이 모두 같을 경우, 두 값만 같을 경우, 세 값 모두 다를 경우에 따른 조건문을 작성한 후
조건에 맞는 수식을 통해 상금을 계산하였다.

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        int prize = 0;
        int max = 0;

        if(a == b && b == c)
            prize = 10000 + 1000 * a;
        else if(a == b && a != c)
            prize = 1000 + 100 * a;
        else if(a == c && a != b)
            prize = 1000 + 100 * a;
        else if(b == c && b != a)
            prize = 1000 + 100 * b;
        else if(a != b && b != c && a != c) {
            if(a > b && a > c)
                max = a;
            else if(b > a && b > c)
                max = b;
            else if(c > a && c > b)
                max = c;
            prize = max * 100;
        }
        System.out.print(prize);
        sc.close();
    }
}