문제
감기 증상이 있으면 `Y`, 감기 증상이 없으면 `N`으로 나타내기로 하고, 체온 수치에 따라 진료소를 다르게 구분
- 증상 `Y`, 37℃ 이상 = `A`
- 증상 `N`, 37℃ 이상 = `B`
- 증상 `Y`, 37℃ 미만 = `C`
- 둘 다 괜찮은 경우 = `D`
한 번에 3명 검사, `A`로 가는 사람이 `2명 이상` 나올 때는 위급 상황으로 분류
위급 상황인지 판단하는 프로그램 작성하기.
입력 형식
첫 번째 줄부터 3개의 줄에 걸쳐, 1줄에 1명씩 총 3명의 감기 증상과 체온이 공백을 사이에 두고 주어짐.
감기 증상은 항상 `Y` 또는 `N`으로 이루어진다고 가정해도 좋음.
- 0 <= 주어지는 체온 <= 40
출력 형식
위급 상황이면 `E`, 그렇지 않으면 `N`을 출력
입출력 예제
예제 1
입력 | 출력 |
Y 38 N 36 Y 40 |
E |
예제 2
입력 | 출력 |
Y 36 Y 37 N 37 |
N |
내가 작성한 코드 1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char a = sc.next().charAt(0);
int b = sc.nextInt();
if(a=='Y' && b>=37){
System.out.print("A");
} else if(a=='N' && b>=37){
System.out.print("B");
} else if(a=='Y' && b<37){
System.out.print("C");
} else {
System.out.print("D");
}
if('A'>=2){
System.out.print("E");
} else{
System.out.print("N");
}
}
}
- 두 개의 if가 각각 작동하기 때문에 `AE`가 나옴
- 아래 if문의 조건에서 `'A'>=2`는 의미가 없음
고민하게 된 것
1. 진료소를 구분할 때 쓴 `A`, `B`, `C`, `D`를 어딘가에 저장해야 하는 건가?
2. 한 번에 3명이 진료를 보는 것을 어떻게 표현할 수 있을까?
해결
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cnt = 0;
for(cnt = 0; cnt <= 3; cnt++){
char a = sc.next().charAt(0);
int b = sc.nextInt();
if(a=='Y' && b>=37){
cnt++;
} else if(a=='N' && b>=37){
} else if(a=='Y' && b<37){
} else {
}
}
if(cnt>=2){
System.out.print("E");
} else{
System.out.print("N");
}
}
}
- 테스트 케이스가 `Y 37` `Y 36` `Y 36`인 경우에 `N`을 출력해야 하는데 `E`를 출력하게 됨
고민하게 된 것
1. 진짜 왜인지 하나도 모르겠다... 나는 돌대가리인가...
그래서 결국 코드를 싹 다 지우고 하나씩 다시 생각하기로 했습니다.
생각하다보니 뭔가 굉장히 교묘한 함정에 걸린 게 아니었나 싶었던 부분이 있었어요.
진료소를 나눈 걸 써먹을 곳이 없다는 점!
그리고 A만 위급 상황으로 분류하니까 A가 아니면 다 N이 뜨면 된다는 점!
사실 그렇게 많은 게 필요한 문제가 아니었지 않을까! 여기까지 생각하고 팔짝 뛰며 유레카를 외쳤어요.
해결
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cnt = 0; // A로 분류된 사람 수를 세기 위한 변수
// 3명의 입력을 받기 위해 반복
for(int i = 0; i < 3; i++){
char sym = sc.next().charAt(0); // 감기 증상 (Y/N)
int temp = sc.nextInt(); // 체온 (0 ≤ 주어지는 체온 ≤ 40)
// 조건에 따라 분류
if(sym == 'Y' && temp >= 37){
cnt++; // A로 분류된 사람 수 증가
}
}
// A로 분류된 사람이 2명 이상이면 위급상황
if(cnt >= 2){
System.out.print("E");
} else{
System.out.print("N");
}
}
}
돌대가리 탈출. 진짜 유레카. 감사합니다.