
-Code
import java.util.Scanner;
public class BOJ1193 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(solution(n));
}
private static String solution(int num) {
int temp = 0;
int now = 0;
while (temp < num) {
temp += ++now;
}
// 방향 전환 조건
boolean flag = now % 2 == 0;
// 방향에 따른 row와 col 위치 조정
int row = flag ? 1 : now;
int col = !flag ? 1 : now;
// 이동 방향 셋팅
int dRow = flag ? 1 : -1;
int dCol = !flag ? 1 : -1;
// 이동 횟수
// 현제 이동하는 줄의 원소 갯수 - 이전 지나간 원소들 -1
int move = now - (temp - num) - 1;
row += dRow * move;
col += dCol * move;
return row + "/" + col;
}
}
위와 같이 해결했으나 너무 복잡하게 푼거 같아서 개선 받은 코드로 다시 작성해 봤습니다.
import java.util.Scanner;
public class BOJ1193 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(solution(n));
}
private static String solution(int num) {
int sum = 0;
int line = 0;
// sum + line보다 작아야 몇번째 대각선인지 구할수 있음
while (sum + line < num) {
sum += line;
line++;
}
// 해당 대각선이 내에서 몇번째인지 확인
int pos = num - sum;
// 방향 전환 조건
int row, col;
if (line % 2 == 0) {
// 대각선이 짝수번째인 경우 위에서 아래로
row = pos; // 몇번째 위치에 따라 변환
col = line - pos + 1;
} else {
// 대각선이 홀수번째인 경우 아래에서 위
row = line - pos + 1;
col = pos;
}
return row + "/" + col;
}
}
while 조건문에 line을 더해서 아래 로직에 또 빼는 일을 제거하고 이동 방향을 정해서 *로 계산 했으나 대각선 홀수 짝수에 따라 대각선 위치를 통해 행이나 열중 하나를 바로 구할 수 있었고 다른쪽은 해당 위치를 빼고 +1로 조정하여 더 보기 편하고 좋은 코드로 바꿀 수 있음을 알게 되었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 5086번 배수와 약수 (0) | 2025.12.21 |
|---|---|
| [백준/Java] 2869번 달팽이는 올라가고 싶다 (2) | 2025.12.21 |
| [백준/Java] 2292번 벌집 (0) | 2025.12.21 |
| [백준/Java] 2903번 중앙 이동 알고리즘 (0) | 2025.12.21 |
| [백준/Java] 2720번 세탁소 사장 동혁 (0) | 2025.12.21 |