[Baekjoon] if문 알고리즘 문제
1330번: 두 수 비교하기 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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
|
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
|
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
|
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
|
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까지이다. 꾸준히 하자.