코드 저장소

공부에는 끝이 없다!

JAVA/코딩 테스트

백준 문제 풀이 - 조건문 단계

VarcharC2K 2023. 8. 8. 14:58

조건문 단계 역시 단순한 If문의 연속인 만큼 크게 어려운 문제는 없었다.

몇가지 기초적인 실수를 했던 것을 다시 한번 복습해본다.

 

 

9498번 - 시험 성적 (브론즈 5)

class Main{
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int point = sc.nextInt();
        
        switch(point)
            case point >= 90 :
                System.out.println('A');
                break;
            case point < 90 && point >= 80 :
                System.out.println('B');
                break;
            case point < 80 && point >= 70 :
                System.out.println('C');
                break;
            case point <70 && point >= 60 :
                System.out.println('D');
                break;
            case point < 60 :
                System.out.println('F');
                break;
        
    }
}

처음 생각으론 그냥 switch 문에 넣고 한번에 돌려버려야지 라고 생각했지만... switch 문에는 비교 연산자 사용이 안된다는 것을 잠깐 잊고 있었다. 결과는 당연하게 컴파일 에러...

다음과 같은 코드로 변환하였다.

  Scanner sc = new Scanner(System.in);
        int point = sc.nextInt();
        Character result = 'F';
        result = point >= 90?'A':
            point<90 && point>=80?'B' :
            point<80 && point>=70?'C' :
            point<70 && point>=60?'D' : 'F';
        System.out.println(result);

삼항 연산자를 여러번 반복하여 한번에 구현하였다. Scanner를 사용한 만큼 시간 자체는 조금 높게 나왔다.

 

다른 하나는 그냥 간단한 발상의 전환이였는데

 

2884번 - 알람 시계 (브론즈 3)

 
        if(m - 45 < 0){
            m = m + 60 - 45;
            h = h - 1;
        } else {
            m = m - 45;
        }
        
        if(h<0){
            h = h + 24;
        }

처음에는 이렇게 If문으로 일일히 구분하게 코드를 구성했는데 다른 사람의 코드를 보다가 굳이 이렇게 구현할 필요가 없다는 것을 알았다. 어차피 전체를 분으로 변환한뒤 추후 출력시에 시간은 /60으로 변환해 주고 분은 %60으로 나머지만 표현하면 되는 문제였던 것.

시험 삼아 다음 문제인 오븐 시계에서는 If문 없이 위의 계산식으로 구현해 보았다.

 

2525번 - 오븐 시계 (브론즈 3)

 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = br.readLine().split(" ");
        int m = Integer.parseInt(arr[0]) * 60 + Integer.parseInt(arr[1]);
        m += Integer.parseInt(br.readLine());
        br.close();
        
       System.out.println(m/60%24 + " " + m%60);

시간이 24시간이 넘어가는 경우가 발생할 수 있으니 %24만 추가해 주고 계산식으로 처리해버리니 훨씬 깔끔하게 결과를 얻을 수 있었다.