https://www.acmicpc.net/problem/4299
설명
문제에서 서론이 길지만 핵심은 맨 아랫줄이다. 두 팀의 점수의 합과 차가 주어지고 그걸 이용해서 스코어를 구하는 것이다. 단순한 수학 문제이다.
풀이
점수의 합에서부터 경우의 수를 다 확인하면서 문제를 풀었다. 1씩 마이너스 해가면서 입력된 점수차와 맞는지 확인했다.
1. mk는 상대팀, afc는 우리팀이라고 가정한다. (헷갈림 방지)
2. while 문
- 점수합에서 0을 빼서 afc 변수에 저장한다. 경우의 수를 다 확인하는 것이므로 먼저 상대팀 점수가 0이라고 가정하고 푼다.
- 우리팀인 afc 점수에서 상대팀인 mk를 뺀 값이 점수차와 같으면 스코어를 출력하고 while문을 빠져나온다.
- 점수차가 같지 않으면 상대팀 mk 점수를 1 증가시킨다.
- 그래서 점수차가 같아질 때까지 반복한다.
- 그러나 합과 차를 갖는 경기 결과가 없을 때 -1을 출력해야 하므로 상대팀 점수가 점수 합보다 크면 중단시키도록 한다.
출력 결과 조건에서 점수가 높은 거 먼저 출력시키라고 했는데, 어느 팀 점수가 높든 점수차는 일정하기 때문에 그런 조건은 코드에 넣어주지 않아도 된다.
Solution
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = sc.nextInt();
int diff = sc.nextInt();
int mk = 0;
while(true) {
int afc = sum - mk;
if (afc - mk == diff) {
System.out.println(afc + " " + mk);
break;
} else {
mk += 1;
}
if (mk > sum) {
System.out.println(-1);
break;
}
}
}
}
/**
* 반례 : 6 6 or 6 5
*/
👩💻 회고
경우의 수를 다 따졌다고 생각했는데 상대팀 점수가 0인 경우를 생각 못했었다. 그래서 처음에 점수차가 0이였을 때 -1을 출력시켰었더랬다...
'BOJ 코딩테스트 > Bronze' 카테고리의 다른 글
BOJ 5524 : 입실 관리 (Java/구현/Bronze 4) (1) | 2024.10.09 |
---|---|
BOJ 4470 : 줄번호 (Java/구현/Bronze 4) (1) | 2024.10.09 |
BOJ 2845 : 파티가 끝나고 난 뒤 (Java/구현/Bronze 4) (1) | 2024.09.30 |
BOJ 2083 : 럭비 클럽 (Java/구현/Bronze 4) (0) | 2024.09.29 |
BOJ 29731 : 2033년 밈 투표 (Java/구현/Bronze 5) (1) | 2024.09.28 |