728x90
문제
https://www.acmicpc.net/problem/1193
지그재그 순회 방식으로 n번째 분수를 찾는 문제입니다. 분수는 대각선 방향으로 순회하며, 홀수 번째 대각선에서는 오른쪽 위 방향(↗)으로, 짝수 번째 대각선에서는 왼쪽 아래 방향(↙)으로 진행됩니다.
접근 방법
- 대각선 번호와 누적 칸 수 계산: n이 속하는 대각선 번호와 해당 대각선까지의 칸의 누적 합을 구합니다.
- 짝수/홀수 대각선 구분: 짝수 대각선인 경우와 홀수 대각선인 경우에 따라 분자와 분모를 계산합니다.
구현
- 대각선 번호와 누적 칸 수 계산:
- crossCount는 현재 대각선 번호를 나타냅니다.
- square는 해당 대각선까지의 칸의 누적 합을 나타냅니다.
- n이 square보다 작아질 때까지 대각선 번호를 증가시키고 누적 칸 수를 업데이트합니다.
- 짝수/홀수 대각선 구분:
- crossCount가 짝수인 경우 분자는 crossCount - (square - n)이고 분모는 (square - n) + 1입니다.
- crossCount가 홀수인 경우 분자는 (square - n) + 1이고 분모는 crossCount - (square - n)입니다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int crossCount = 0; // 대각선 번호
int square = 0; // 대각선 번호 까지 칸의 누적 합 1,3,6,10,15,...
while(square < n) {
crossCount++;
square += crossCount;
}
if(crossCount%2==0){
int numerator = crossCount - (square - n); // 분자
int denominator = (square - n) + 1; // 분모
System.out.println(numerator + "/" + denominator);
}else {
int numerator = (square - n) + 1; // 분자
int denominator = crossCount - (square - n); // 분모
System.out.println(numerator + "/" + denominator);
}
}
}
메모리:18396kb 시간:232ms
728x90
'IT 개발 관련 > [Algorithm]' 카테고리의 다른 글
[백준] 1251번 : 단어 나누기 - Java (0) | 2024.06.22 |
---|---|
[백준] 18352번 : 특정 거리의 도시 찾기 - Java (0) | 2024.06.21 |
[백준] 2477번 : 참외밭 - Java (0) | 2024.06.19 |
[백준] 9655번 : 돌 게임 - Java (0) | 2024.06.16 |
[백준] 1697번 : 숨바꼭질 - Java (0) | 2024.06.11 |