https://www.acmicpc.net/problem/1789

 

1789번: 수들의 합

첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.

www.acmicpc.net

코드설명

수학 관련 문제입니다.

 

10을 예시로 설명해보겠습니다.

서로 다른 N개의 자연수의 합이 10 이라고 합니다.

이때, N의 최대값을 구해야하므로 1부터 더해가며 시작해야합니다.

1 + 2 + 3 + 4 = 10 입니다. 만약, 10 인경우에 바로 종료시키며 cnt를 출력시켜도 되지만, 10보다 큰 경우인 15까지 가보겠습니다.

1 + 2 + 3 + 4 + 5 = 15 입니다.

만약 10보다 클경우, 5만 빼주면 가능합니다.그렇게 되면 cnt - 1 을 출력할 경우 답이 나옵니다. 

 

서로 다른 N개의 자연수의 합이 11 이라고 합니다.

1 + 2 + 3 + 4 + 5 = 15 입니다.

이떄 15 -4 를 하면 11 로 N은 4개가됩니다.

 

이런식으로 본인보다 바로 큰 숫자가 나온다면, 지금까지 이루어져잇던 숫자 중 1개를 뺄시 해당 숫자로 만들 수 있습니다.

코드

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

public class Main {
	public static long N, M, K = 0;
	public static long answer = 0;
    public static void main(String[] args) throws IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer st = new StringTokenizer(br.readLine());
    	
    	N = Long.parseLong(st.nextToken());
    	
    	long sum = 0;
    	long cnt = 0;
    	for(long i=1; ;i++) {
    		sum += i;
    		if(sum > N) {
    			answer = i - 1;
    			break;
    		}
    	}
    	System.out.println(answer);
    }
}

 

처음에 푼 코드입니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;


public class Main {
	
	public static long N;
    public static void main(String[] args) throws IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	
    	StringTokenizer st = new StringTokenizer(br.readLine());
    	N = Long.parseLong(st.nextToken());
    	
    	long sum = 0;
    	long cnt = 0;
    	for(int i=1; ;i++) {
    		if(sum > N) {
    			break;
    		}
    		sum += i;
    		cnt ++;
    	}
    	System.out.println(cnt - 1);
    }
}

+ Recent posts