https://www.acmicpc.net/problem/1789
코드설명
수학 관련 문제입니다.
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);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1343 폴리오미노 - 그리디 + 구현 JAVA (0) | 2023.07.20 |
---|---|
[백준] 14916 거스름돈 - DP JAVA (0) | 2023.07.20 |
[백준] 14391 종이 조각 - 완전탐색(BruteForce) + DFS(깊이우선탐색) JAVA (0) | 2023.07.18 |
[백준] 16637 괄호 추가하기 - 완전탐색(BruteForce) + DFS(깊이우선탐색) + 연산자 JAVA (0) | 2023.07.18 |
[백준] 21278 호석이 두 마리 치킨 - DFS(조합) + BFS JAVA (0) | 2023.07.17 |