import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class FindNum
{
public static void main(String[] args) throws IOException
{
int now_y=1, now_x=1;
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int total_num = Integer.parseInt(br.readLine());
int count=1;
char dimension = 'x';
int dir_y=1, dir_x=-1;
for(int i=1;i<total_num;)
{
if(dimension=='y')
{
now_y+=1;
dimension = 'x';
i++;
//System.out.printf("dimen[y]: %d [x]: %d count: %d\n", now_y,now_x,count);
}
else//dimension=='x'
{
now_x+=1;
dimension = 'y';
i++;
//System.out.printf("dimen[y]: %d [x]: %d count: %d\n", now_y,now_x,count);
}
if(i>=total_num)break;
for(int j=1;j<=count;j++)
{
now_y+=dir_y;
now_x+=dir_x;
i++;
if(i>=total_num)break;
//System.out.printf("[y]: %d [x]: %d count: %d\n", now_y,now_x,count);
}
//대각선 위쪽방향 or 아랫쪽방향
//count가 늘어남으로 대각선의 길이도 점점 늘어남
dir_y*=-1;
dir_x*=-1;
count++;
}
System.out.println((now_y)+"/"+(now_x));
}
}
위 사진은 이동 횟수와 관련된 숫자이다 백준에서 입력된값(total_num) - 1 만큼 이동하면 된다
ex) 2가 입력되면 두번째 위치의 분수를 구함으로 1번(2-1)만 이동 하면된다.
다음 두가지 원칙을 기억하자.
1. 한번 이동할때마다 i값을 증가해야 한다.
2. i값이 증가된 뒤에는 총횟수만큼 이동했는지 검사한다.
노트필기중
빨간색 화살표 : 대각선 전환
초록색 화살표 : 대각선내 이동
dimension에 설정된 방향으로 오른쪽으로 가거나 밑쪽으로 이동한다.
대각선은 점점 길어짐으로 대각선 방향이 변할때 대각선 이동횟수도 증가해야한다.
잘 실행된다.