문제 주소
https://www.acmicpc.net/problem/1789
문제 설명
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력
첫째 줄에 자연수 N의 최댓값을 출력한다.
예제 입력 1
200
예제 출력 1
19
제출 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long n = Long.parseLong(st.nextToken());
long count = 0;
long sum = 0;
long last = 0;
long diff = 0;
for(long l = 1; l<=n;l++){
sum = sum+l;
if(sum>n){
last = l-1;
diff = sum-n;
break;
}
count++;
}
if(diff<=last){
System.out.println(count);
}
}
}
코드 설명
제일 많이 더하려면 1부터 작은것들로 채워나가야 하는데
더한 값이 n을 넘었을때
diff(n과 넘친 sum의 차이)가 분명 마지막에 더한 원소보다 작을 것이므로
diff인 원소를 하나 빼주고 마지막 원소를 넣어서 sum을 n에 딱 맞추면 됨
풀이 과정
1부터 다른거 하나씩 더해줌
그리고 넘치면 넘친 숫자의 값을 가진 원소를 하나 배제하고 세면 될 거 같다고 생각함
4,294,967,295는 32비트 부호 없는 정수의 최대값입니다. 즉, 이 값은 32비트 unsigned integer로 표현할 때의 최대값입니다.-> 이게 Integer의 MAX_VALUE = 0x7fffffff 보다 크길래 long에다 넣어줌
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long n = Integer.parseInt(st.nextToken());
long count = 0;
long sum = 0;
long last = 0;
long diff = 0;
for(long l = 1; l<=n;l++){
sum = sum+l;
if(sum>n){
last = l-1;
diff = sum-n;
break;
}
count++;
}
if(diff<=last){
System.out.println(count);
}
}
}
200 넣으면 19가 잘 나오길래 제출했더니
런타임 에러가 뜸
알고보니 parseLong 해줘야 하는데 너무 parseInt가 습관이 돼서 그거 당연하다고 생각하고 안 바꿔줬음
long n = Integer.parseInt(st.nextToken());
→
long n = Long.parseLong(st.nextToken());
이거 바꿔주고 맞았다
'Coding Test' 카테고리의 다른 글
[백준] 블랙잭 (0) | 2024.04.01 |
---|---|
[백준] 한수 (0) | 2024.03.30 |
[프로그래머스] 테이블 해시 함수 (0) | 2024.03.27 |
[프로그래머스] 시소 짝꿍 (0) | 2024.03.26 |
[프로그래머스] 프로세스 (1) | 2024.03.25 |