반응형
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
br.close();
// 이전 대각선 까지의 칸 갯수
int beforeSum = 0;
// 현재 대각선의 칸 갯수
int currentSum = 1;
while(true) {
// N이 현재 대각선을 포함하여 안 쪽에 있는 경우
if(N <= (beforeSum + currentSum)) {
// 현재 대각선이 홀수일 땐 분자가 (N-이전대각선 칸의 합)
if(currentSum %2 == 0) {
// 분자 + 분모 = 현재대각선의 칸 갯수 + 1
// 분자
int nume = (N-beforeSum);
//분모
int deno = (currentSum+1)-nume;
// 결과값 출력
System.out.println(nume + "/" + deno);
break;
}
// 현재 대각선이 짝수일 땐 분모가 (N-이전대각선 칸의 합)
else {
// 분자 + 분모 = 현재대각선의 칸 갯수 + 1
//분모
int deno = (N-beforeSum);
// 분자
int nume = (currentSum+1)-deno;
// 결과값 출력 (분자 + 분모 = 현재대각선의 칸 갯수 + 1)
System.out.println(nume + "/" + deno);
break;
}
}
// N이 현재 대각선범위보다 더 멀리 있는 경우
else {
beforeSum += currentSum;
currentSum ++;
}
}
}
}
이번 문제의 중요한 부분은 아래와 같습니다.
1. 대각선의 길이 = n 번째 대각선
1번 째 대각선은 1개
2번 째 대각선은 2개
3번 째 대각선은 3개
...
2. 한 대각선 내의 각각의 칸들은 분자+분모 = n 번째 대각선 + 1
1번 째 대각선의 분자+분모 = 2
2번 째 대각선의 분자+분모 = 3
3번 째 대각선의 분자+분모 = 4
...
3. n번 째 대각선에서 n이 홀수인 경우와 짝수인 경우 구분
대각선이 홀수일 땐 분자가 (N-이전 대각선까지 칸의 합)
대각선이 짝수일 땐 분모가 (N-이전 대각선까지 칸의 합)
소스 설명은 주석을 참고해주세요.
좋은 지적과 지식 공유는 언제나 환영합니다^^
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 9095번 : 1, 2, 3 더하기 (0) | 2022.01.24 |
---|---|
[이것이 코딩테스트다] 7. 다이나믹 프로그래밍 - 실전 문제 풀이 (0) | 2022.01.23 |
[BAEKJOON] 2805번 : 나무자르기 (0) | 2022.01.21 |
[이것이 코딩테스트다] 7. 다이나믹 프로그래밍 (0) | 2022.01.21 |
[BAEKJOON] 1654번 : 랜선자르기 (0) | 2022.01.20 |