문제


어떤 수 N 을 보고 삼각수라면 몇 번째인지 아니라면 -1 을 출력하는 문제이다. 결국 N = n(n+1)/2 이고, n을 찾아야하기 때문에 이분 탐색을 사용하였다.

실수


코드


import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class Solution {
    static StringBuilder result = new StringBuilder();

    public static void main(String args[]) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.parseInt(br.readLine());

        long n;
        ///////////////////////////
        long l, r, mid, answer;
        ///////////////////////////
        for (int test_case = 1; test_case <= T; test_case++) {
            result.append("#" + test_case + " ");
            n = Long.parseLong(br.readLine());
            /////////////////////////////

            answer = -1;

            l = 0L;
            r = 10000000001L;
            while (l <= r) {
                mid = (l + r) / 2;
                if (mid * (mid + 1) / 2 < n) {
                    l = mid + 1;
                } else if (mid * (mid + 1) / 2 > n) {
                    r = mid - 1;
                } else {
                    answer = mid;
                    break;
                }
            }

            result.append(answer + "\n");
            System.out.print(result);
            result.setLength(0);
        }
    }
}

업데이트:

댓글남기기