본문 바로가기

백준 문제풀이

[Baekjoon 25184] 동가수열 구하기 - JAVA

728x90

[Silver IV] 동가수열 구하기 - 25184

문제 링크

성능 요약

메모리: 14296 KB, 시간: 140 ms

분류

해 구성하기

문제 설명

길이가 $N$인 동가수열은 다음 두 조건을 만족하는 수열이다.

  • 동가수열은 $1$ 이상 $N$ 이하인 정수로 이루어져 있고, 모든 원소는 서로 다르다.
  • 동가수열의 서로 이웃한 원소의 차는 $\lfloor \frac{N}{2} \rfloor$이상이다.

길이가 $N$인 동가수열을 아무거나 하나 구해보자. 주어지는 모든 입력에 대해 동가수열은 항상 존재한다.

입력

첫째 줄에 구하고자 하는 동가수열의 길이 $N$($1 \le N \le 5\,000$)이 주어진다.

출력

첫째 줄에 길이가 $N$인 동가수열을 아무거나 하나 출력한다. 동가수열은 공백으로 구분해서 출력해야 한다.

문제 풀이

주어진 길이 N에 대해 조건을 만족하는 동가수열을 출력하는 문제다.

동가수열은 주어진 조건을 만족하는 정수 수열로, 인접한 원소의 차이가 ⌊N/2⌋ 이상이어야 한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();

        int difference = N / 2;
        int leftValue = difference;
        int rightValue = (N % 2 == 1) ? N - 1 : N;

        for (int i = 0; i < difference; i++) {
            sb.append(leftValue--).append(' ').append(rightValue--).append(' ');
        }

        if (N % 2 == 1) {
            sb.append(N).append('\n');
        } else {
            sb.append('\n');
        }

        System.out.println(sb);

        br.close();
    }
}

코드 풀이

int N = Integer.parseInt(br.readLine());
  • N: 동가수열의 길이를 저장할 변수
int difference = N / 2;
int leftValue = difference;
int rightValue = (N % 2 == 1) ? N - 1 : N;
  • difference: 인접한 원소의 차를 나타내기 위해 변수에 N을 2로 나눈 몫을 저장한다.
  • leftValue: 왼쪽에 위치하는 수를 나타내기 위해 difference를 할당한다.
  • rightValue: 오른쪽에 위치하는 수를 나타내기 위해 N이 홀수인 경우 N - 1을, 짝수인 경우 그대로 N을 할당한다.
for (int i = 0; i < difference; i++) {
    sb.append(leftValue--).append(' ').append(rightValue--).append(' ');
}
  • 인접한 원소의 차인 difference 값만큼 반복한다.
  • leftValuerightValue를 문자열에 추가하고, 두 변수를 각각 1씩 감소시킨다.
if (N % 2 == 1) {
    sb.append(N).append('\n');
} else {
    sb.append('\n');
}
  • N이 홀수인 경우 N을 문자열에 추가하고 줄 바꿈 문자를 덧붙인다.
  • N이 짝수인 경우 줄 바꿈 문자만 추가한다.
System.out.println(sb);
br.close();
  • sb를 출력한다.
728x90