Study/알고리즘

1193번 - 분수찾기 JAVA

토기발 2022. 8. 5. 11:58

코드는 짧은데 배열 문제에 약해서 다른 분들의 코드들을 많이 찾아보고 내것으로 만드는 데 오래 걸렸다.

가로세로 배열 문제라서 for문을 2번 돌려서 이중배열로 풀어야 하나 했는데 라인으로 해결하니 훨씬 간단했다.

대각선 라인으로 생각하면

1 : 1/1 
2 : 1/2 2/1 
3 : 3/1 2/2 1/3
4 : 1/4 2/3 3/2 4/1

5 : 5/1 4/2 3/3 2/4 1/5

 

라인이 홀수일 경우 분모는 1부터 시작하고 점점 커진다. 분자는 라인수부터 점점 작아진다. 

라인이 짝수일 경우 분모는 라인의 숫자이고 점점 작아진다. 분자는 1부터 라인수까지 점점 커진다.

 

X가 주어졌을 때 X가 몇번째 라인에 있는 숫자인지 찾고 X자리를 찾는다.

몇번째 자리에 있는지는 x-i를 통해 찾는다.


import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in); 
		
		int X = in.nextInt();
		
		for(int i = 1; i <= 10000000 ; i++) { //i = 라인 수
			if(i >= X) {
				if(i % 2 == 0) { //짝수 줄에서는 분자: X 분모: 라인수-X+1 
					System.out.println(X + "/" + (i - X + 1));
				} else {	//홀수 줄에서는 분자: 라인수-X 분모: X 
					System.out.println(i - X + 1 + "/" + X);
			}
				break;
			}
			X = X - i; //입력값의 자리수를 구하기 위한 식 
		}
	}
}

 

설명은 주석에... 

'Study > 알고리즘' 카테고리의 다른 글

백준 1233번 - 주사위 JAVA  (0) 2022.08.11
백준 1225번 - 이상한 곱셈 JAVA  (0) 2022.08.10
백준 1173번 - 운동 JAVA  (0) 2022.08.04
백준 1259번 - 팰린드롬수 JAVA  (0) 2022.08.02
백준 1159번 - 농구 경기 JAVA  (0) 2022.07.30