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값만큼 반복한다. leftValue와rightValue를 문자열에 추가하고, 두 변수를 각각 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
'백준 문제풀이' 카테고리의 다른 글
| [Baekjoon 1806] 부분합 - JAVA (0) | 2023.08.27 |
|---|---|
| [Baekjoon 13915] Hot Air Ballooning - JAVA (0) | 2023.08.27 |
| [Baekjoon 14426] 접두사 찾기 - JAVA (0) | 2023.08.22 |
| [Baekjoon 14465] 소가 길을 건너간 이유 5 - JAVA (0) | 2023.08.20 |
| [Baekjoon 19638] 센티와 마법의 뿅망치 - JAVA (0) | 2023.08.20 |