백준 네 번째 수

KIMYEONGJUN·5일 전
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 상근이가 고른 4개의 수 중 3개가 주어진다.
이 수는 크기 순이 아닐 수도 있고, -100보다 크거나 같고, 100보다 작거나 같은 정수이다.

첫째 줄에 까먹은 수를 출력한다.
정답이 여러 개일 경우에는 아무거나 출력하면 된다.
또한 정답이 존재하지 않는 경우는 입력으로 주어지지 않는다.

내가 이 문제를 보고 생각해본 부분

입력 받기 및 숫자 준비:
BufferedReader와 StringTokenizer를 써서 입력된 줄에서 세 숫자를 꺼낸다.
이 세 숫자를 nums라는 곳에 넣어준다.
숫자 순서대로 정리:
Arrays.sort(nums)로 세 숫자를 작은 것부터 큰 순서대로 나열한다.
가장 작은 수를 a, 중간 수를 b, 가장 큰 수를 c이다.
숫자 사이의 간격 계산:
a와 b 사이의 간격(diff1)을 계산한다.
b와 c 사이의 간격(diff2)을 계산한다.
빠진 숫자 찾기:
만약 diff1과 diff2가 같다면, 세 숫자가 연속해서 나온 등차수열이고, 마지막 숫자가 빠진 것입니다. c + diff1을 출력한다.
만약 diff1의 두 배가 diff2라면, a와 b 사이 간격이 공차이고 b와 c 사이에 숫자가 빠진 것입니다. b + diff1을 출력한다.
그렇지 않다면 (diff2의 두 배가 diff1인 경우), b와 c 사이 간격이 공차이고 a와 b 사이에 숫자가 빠진 것입니다. a + diff2를 출력한다.
결과 출력: 찾은 빠진 숫자를 화면에 보여준다.

코드로 구현

package baekjoon.baekjoon_28;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

// 백준 2997번 문제
public class Main1016 {
    public static void main(String[] args) throws IOException {
        // 입력을 읽기 위한 BufferedReader와 StringTokenizer 사용
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        // 세 개의 숫자를 저장할 배열
        int[] nums = new int[3];
        for (int i = 0; i < 3; i++) {
            nums[i] = Integer.parseInt(st.nextToken());
        }

        // 숫자 배열을 오름차순으로 정렬
        Arrays.sort(nums);

        // 정렬된 세 개의 숫자
        int a = nums[0];
        int b = nums[1];
        int c = nums[2];

        // 인접한 숫자 사이의 차이 계산
        int diff1 = b - a;
        int diff2 = c - b;

        // 차이를 비교하여 빠진 숫자 찾기
        if (diff1 == diff2) {
            // 차이가 같은 경우 (a, b, c, ?) 또는 (?, a, b, c)
            // 여기서는 가장 큰 수가 빠진 경우로 간주하여 c + 공차(diff1) 출력
            System.out.println(c + diff1);
        } else if (diff1 * 2 == diff2) {
            // 첫 번째 차이가 두 번째 차이의 절반인 경우 (a, b, ?, c)
            // 공차는 diff1. 빠진 수는 b + 공차
            System.out.println(b + diff1);
        } else { // diff1 == diff2 * 2
            // 첫 번째 차이가 두 번째 차이의 두 배인 경우 (a, ?, b, c)
            // 공차는 diff2. 빠진 수는 a + 공차
            System.out.println(a + diff2);
        }

        br.close(); // BufferedReader 자원 해제
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글