[BOJ 1193]スコアの検索


質問元:[BOJ 1193]噴水を探して、https://www.acmicpc.net/problem/1193

👨‍🏫質問する


無限大の配列には以下の点数が書かれています.

このようにリストされた点数は、1/1->1/2->2/1->3/1->2/2->...の順に1番、2番、3番、4番、5番、...点数となります.
Xが与えられた場合、Xの2番目の点数を求めるプログラムを作成してください.

入力


第1行は、X(1≦X≦1000000)を与える.

しゅつりょく


1行目にスコアを出力します.

サンプルI/O


入力例
14
サンプル出力
2/4

💻コード#コード#

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Fraction {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int x = Integer.parseInt(br.readLine());

		// 몇 번째 대각선인지 저장하기 위한 변수
		int wave = 1;
		// 대각선마다 몇 번째 수인지 검사하기 위한 변수
		int check = 0;
		// 루프를 탈출하기 위해 누적값을 저장하기 위한 변수
		int count = 0;
		
       		// 누적값이 입력값과 같아지면 루프 탈출
		while(count < x) {
        
			// 각 대각선의 끝에 도달하면 검사용 변수를 초기화 하고 다음 대각선으로 이동
			if(wave == check) {
				wave++;
				check=0;
			}
			check++;
			count++;
		}
		
		/* 
        	 * 짝수 번 대각선 일 경우 분자는 대각선 마다 검사한 수, 
         	 * 분모는 대각선 값에서 검사한 값을 뺀 값에 1을 더해준다. 
             	 */
		if(wave % 2 == 0) {
			bw.write(check + "/" + (wave - check + 1));
		}
		// 홀수 번 대각선 일 경우는 분자와 분모를 뒤집어준다
		else {
			bw.write((wave - check + 1) + "/" + check);
		}
		
		bw.flush();
		bw.close();
		br.close();
	}
}

💡ポスト


少し無知なようで、問題を解決する感じがありません.😢 問題を解くたびに他人がどのように問題を解いているのかを確認したり、等差数列で問題を解いている人もいますが、これらの問題はそれぞれ自分の答えがあるので面白いです.
このような数学の実施問題をするたびに、私はいつも数学の思考が少し不足していると感じて、しかしいつも似たような問題をして、脳を柔らかくして、ほほほ😋