Stay Hungry Stay Foolish

BOJ 코딩테스트/Bronze

BOJ 4299 : AFC 윔블던 (Java/구현/Bronze 4)

dev스카이 2024. 10. 8. 23:24

https://www.acmicpc.net/problem/4299


설명

문제에서 서론이 길지만 핵심은 맨 아랫줄이다. 두 팀의 점수의 합과 차가 주어지고 그걸 이용해서 스코어를 구하는 것이다. 단순한 수학 문제이다.

 

풀이

점수의 합에서부터 경우의 수를 다 확인하면서 문제를 풀었다. 1씩 마이너스 해가면서 입력된 점수차와 맞는지 확인했다. 

 

1. mk는 상대팀, afc는 우리팀이라고 가정한다. (헷갈림 방지)

2. while 문

  1. 점수합에서 0을 빼서 afc 변수에 저장한다. 경우의 수를 다 확인하는 것이므로 먼저 상대팀 점수가 0이라고 가정하고 푼다. 
  2. 우리팀인 afc 점수에서 상대팀인 mk를 뺀 값이 점수차와 같으면 스코어를 출력하고 while문을 빠져나온다.
  3. 점수차가 같지 않으면 상대팀 mk 점수를 1 증가시킨다.
  4. 그래서 점수차가 같아질 때까지 반복한다.
  5. 그러나 합과 차를 갖는 경기 결과가 없을 때 -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을 출력시켰었더랬다...