반응형
무한히 큰 배열에서 위 표와 같은 분수를 배열해놓고 지그재그로 나열하였다.그 때 입력값에 해당하는 분수를 출력하는 문제이다.
접근 방법)
일단 저 표를 먼저 쉽게 바꿔보자. 아래 그림과 같은 규칙을 가지고 있다.하지만 이 규칙을 코드로 어떻게 구현할 것이냐..
x축의 변수를 number_X라 하고 y축의 변수를 number_Y라고 하자.
number_X가 3이고, number_Y가 4인 값은 3/2인것이다.
하지만 문제가 있다 number_Y가 1인 첫번째 줄을 제외하고 홀수줄과 짝수줄 출력 패턴이 반대인 것을 확인할 수 있다.
그럼 number_Y가 홀수, 짝수 여부에 따라 출력을 다르게 해야한다.
결과적으로 짝수일 때는 number_X+"/"+(number_Y+1-number_X)를 출력하고,
홀수일 때는 number_Y+1-number_X)+"/"+number_X를 출력하면 된다.
그럼 number_Y와 number_X를 구하는 방법을 알면 문제를 해결할 수 있는 것이다.
아래 코드를 보면서 알아보자.
정답 코드 1)
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int X = sc.nextInt(); // 입력값
int delete = 1; // number_Y줄의 분수 개수(1,2,3,4..점차 증가 예정)
int number_Y = 0; // 세로축
if(X == 1){ // number_Y줄 case는 바로 출력
System.out.print("1/1");
}else{
while (X > 0){
X = X - delete; // 현재 number_Y줄의 분수 개수를 X에서 삭감
delete++; // 다음 number_Y줄의 분수 개수로 넘어감
number_Y++; // 다음 number_Y줄로 넘어감
}
int number_X = number_Y + X; // number_X 구하기
if(number_Y%2 == 0){ // 짝수 일때
System.out.print(number_X+"/"+(number_Y+1-number_X));
}else{ // 홀수 일때
System.out.print((number_Y+1-number_X)+"/"+number_X);
}
}
}
}
여러가지 case를 생각해야하는 문제이기 때문에 실버 난이도를 가지고 있었던 것 같다.
이러한 문제를 풀 때는 규칙을 가지고 있는 표 혹은 그림을 코드로 작성하기 쉽게 나만의 방식으로 변환하는 것이 중요하다고 생각한다.
반응형
'Baekjoon 자바 코드 > 일반 수학' 카테고리의 다른 글
[백준] 2292번 벌집 풀이 코드 (Java 자바) (0) | 2024.12.18 |
---|---|
[백준] 2903번 중앙 이동 알고리즘 풀이 코드 (Java 자바) (0) | 2024.12.17 |
[백준] 2720번 세탁소 사장 동혁 풀이 코드 (Java 자바) (0) | 2024.12.16 |
[백준] 11005번 진법 변환2 풀이 코드 (Java 자바) (0) | 2024.12.11 |
[백준] 2745번 진법 변환 풀이 코드 (Java 자바) (0) | 2024.12.05 |