Undergraduate Records

[Baekjoon] if문 알고리즘 문제

ire4564 2019. 7. 6. 14:44

1330번: 두 수 비교하기 문제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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();
        
        if(A > B) {
            System.out.println(">");
        } else if(A < B) {
            System.out.println("<");
        } else if(A == B) {
            System.out.println("==");
        }
        
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

문제는 간단했다. 두 개의 숫자를 입력받고 A가 크면 >를, B가 크면 <를 출력하며 같다면 ==를 출력하는 문제였다.

 

9498번 시험 성적 출력 문제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;
 
public class Main {
    public static void main(String args[]) {
    
        Scanner scan = new Scanner(System.in);
        
        int score = scan.nextInt();
        
        if((score >=90&& (score<=100)) {
            System.out.println("A");
        } else if((score >= 80&& (score<=89)) {
            System.out.println("B");
        } else if((score >= 70&& (score <=79)) {
            System.out.println("C");
        } else if((score >= 60&& (score <=69)) {
            System.out.println("D");
        } else {
            System.out.println("F");
        }
        
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

2753 윤년 판단하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.*;
 
public class Main {
    public static void main(String args[]) {
    
        Scanner scan = new Scanner(System.in);
        int year = scan.nextInt();
        
        if((year%4==0)) {
            if((year%100 != 0|| (year%400 == 0)) {
                System.out.println("1");
            } else {
                System.out.println("0");
            }
        } else {
            System.out.println("0");
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

처음에 if문에서 조건을 잘못 써서 2019와 같이 1단위로 계산되는 수들은 아예 결과가 나오지 않았다. 괄호를 잘 파악하지 못하고 코드를 작성하여 엉뚱한 곳에 else 조건을 적어서 잘 발동하지 않는 것이었다. 다행이 문제를 해결하였다.

 

2884 알람시계

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.*;
 
public class Main {
    public static void main(String args[]) {
    
        Scanner scan = new Scanner(System.in);
        int H = scan.nextInt();
        int M = scan.nextInt();
        
        if(M-45 < 0) { //만약 분에서 45분을 뺐는데 음수라면
            M = M - 45 + 60;
            H = H - 1;
        } else {
            M += -45;
        }
        
        if(H < 0) { //시간이 만약 음수라면
            H = H + 24;
        }
        
        System.out.println(H + " " + M);
 
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

10817 세 수 중간값 출력하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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();
        
        int[] num = new int[3];
        int save = 0;
        
        num[0= A;
        num[1= B;
        num[2= C;
        
        if(num[1]>num[2]) {
            save = num[1];
            num[1= num[2];
            num[2= save;
        }
        
        if(num[0]>num[1]) {
            save = num[0];
            num[0= num[1];
            num[1= save;
        } 
        
        if(num[1]>num[2]) {
            save = num[2];
            num[2= num[1];
            num[1= save;
        }
        
        System.out.println(num[1]);
        
         
    }
            
        
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

되게 쉽다고 생각했었는데 최솟값과 최댓값이 아니어서 그런지 초반에 고민을 많이 했다. 선택 정렬을 쓸까 하다가, 그와 비슷한 방식으로 접근하여 아예 수들을 배열에 먼저 넣고 시작을 했다.

임의로 입력받은 세 수를 크기가 3인 배열에 각각 넣고 인덱스로부터 수를 비교한다. 

처음에는 인덱스 1과 2에 있는 수들을 먼저 비교하였다. 그래서 이 숫자들을 왼쪽에서부터 오름차순으로 정렬하는 것을 목표로 비교해가며 수를 바꿨다. 선택정렬을 하기에는 애매한 면이 있어서 숫자가 세 가지밖에 안되므로 각각의 인덱스를 비교해서 자리를 바꿔가며 배열을 정리했다. 

 

마지막에 정리된 배열에서 인덱스1의 값을 출력하게 되면 그 값이 중간값이 되므로 그렇게 중간값을 구할 수 있었다.

그러나 여기서 또 문제가 있었다. 20 10 10 과 같은 예제를 보면 처음에는 인덱스 1,2를 비교하고 1,0만을 비교했더니 같은 작은 수가 뒤에 배치되면 중간값이 이상하게 출력되는 것이었다. 이것을 방지하고자 아래의 인덱스 1과 2를 한 번 더 비교하여 그 오류를 막아주었다.

 

쉽다고 나름 생각했지만 무언가 미묘하게 헷갈린다. 당황하지말고, 너무 자만하지 말고 하나씩 알고리즘 문제를 해결해 나가자. 이번 방학 목표는 백준 알고리즘 단계별 문제 중 수학2까지이다. 꾸준히 하자.