728x90
반응형
내 풀이
import java.io.BufferedReader; import java.io.InputStreamReader; //분수찾기(1193) public class Q_1193 { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int X = Integer.parseInt(br.readLine()); int line = 0; int line_seq = 0; int cnt = 0; while(cnt<X) { line++; line_seq = 0; for(int i=0; i<line; i++) { cnt++; line_seq++; if(cnt==X) { break; } } } int first = 0; int last = 0; for(int i=1; i<=line_seq; i++) { if(line%2==0) { first = i; last = line+1-i; } else { first = line+1-i; last = i; } } System.out.println(first + "/" + last); } }
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로
차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
반응형
내 풀이 설명
우선 문제를 이해하자.
지그재그 순으로 분수를 나타내보면
1/1 → 1/2 → 2/1 → 3/1 → 2/2 → …
이 순서를 조금 보기 좋게 나열해보면
1/1 1/2 | 2/1 3/1 | 2/2 | 1/3 1/4 | 2/3 | 3/2 | 4/1 5/1 | 4/2 | 3/3 | 2/4 | 1/5 1/6 | 2/5 | 3/4 | 4/3 | 5/2 | 6/1 ...
아래와 같은 규칙을 찾을 수 있다.
홀수 라인은 앞자리가 라인 숫자부터 짝수 라인은 1부터 시작한다.
X번째가 몇 번째 라인의 몇 번째에 위치하는지 구해보자.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int X = Integer.parseInt(br.readLine()); //X번째 입력 ex) X가 5일 떄 2/2 int line = 0; //line 변수 line = 3번째 라인의 int line_seq = 0; //해당 line의 몇번째 순번인지의 대한 변수 line_seq = 2번째 위치 int cnt = 0; //cnt 변수 while(cnt<X) { //cnt가 X보다 작을때까지만 반복 line++; //line + 1 (1, 2, 3, 4, 5 ...) line_seq = 0; //line이 바뀌면(+1되면) 해당 라인의 순번은 초기화 for(int i=0; i<line; i++) { //line번 반복 cnt++; //cnt가 X가 될 때까지 증가 line_seq++; //cnt가 늘수록 순번도 증가 if(cnt==X) { //cnt==X일 때, break; //break; } } } //체크용 출력 //System.out.println("line" + line + "의 " + line_seq + "번째에 위치합니다");
출력 결과

이제 라인과 해당 라인의 몇번째에 위치하는지 구했으니 출력을 구해보자.
홀수 라인은 앞자리가 라인 숫자부터 짝수 라인은 1부터 시작한다.
//출력은 분수 형태이므로 first/last식으로 출력할 예정 int first = 0; int last = 0; for(int i=0; i<line_seq; i++) { // if(line%2==0) { //짝수 line일 때 first = i+1; //frist가 1부터 오름차순 last = line-i; //last는 line부터 내림차순 } else { //홀수 line일 때 first = line-i; //first가 line부터 내림차수 last = i+1; //last는 1부터 오름차순 } } System.out.println(first + "/" + last); //출력
출력 결과

더 좋은 풀이가 있겠지만 나는 위와 같은 방식으로 풀어냈다. 처음엔 한 4시간 고민하다가 안 풀려서 다른 문제부터 풀고 대략 일주일 만에 다시 풀어본 거 같은데 1시간정도 고민하고 풀어낸듯...? 진짜 풀어냈을 때 좀 많이 기쁨...!! 이 풀이를 보는 사람이라면 아마 조금 어려워서 찾아본 것 일텐데 도움이 되었으면 좋겠다...!!
반응형
'개발 > 코테 준비' 카테고리의 다른 글
[java] 프로그래머스 - 문자열 내 마음대로 정렬하기 (0) | 2021.12.10 |
---|---|
자바 백준 1929 - 소수 구하기 (에라토스테네스의 체) (0) | 2021.10.31 |
자바 백준 2775 - 부녀회장이 될테야 (0) | 2021.10.21 |
자바 백준 2839 - 설탕 배달 (0) | 2021.10.21 |
자바 백준 4344 - 평균은 넘겠지 (0) | 2021.10.17 |
댓글