-
[백준/BOJ] 1789번 : 수들의 합 (JAVA / 자바)백준 2022. 3. 25. 23:31
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1789
- 문제 -
난이도 실버 5 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
N에 들어올 수 있는 최대한의 값을 구하라 한다.
그렇다면 어려울거없이 1부터 차례대로 빼나가면 된다. 빼다가 남은 값이 빼야할 값보다 작으면 멈추고, 빼야할 값에 -1을 해주면 그 값이 N이다.
예제 1로 예를 들어보자.
200을 만들기위한 서로 다른 자연수들의 합에서 자연수들의 개수가 최대가 되기 위해선 위에서 말한 것처럼 1부터 빼주자.
200 - 1 = 199 / 199 - 2 = 197 / 197 - 3 = 194 / 194 - 4 = 190 / 190 - 5 = 185 / 185 - 6 = 179 / 179 - 7 = 172
172 - 8 = 164 / 164 - 9 = 155 / 155 - 10 = 145 / 145 - 11 = 134 / 134 - 12 = 122 / 122 - 13 = 109
109 - 14 = 95 슬슬 적어지는 폭이 커지니 아래로 나열해보겠다.
95 - 15 = 80
80 - 16 = 64
64 - 17 = 47
47 - 18 = 29
29 - 19 = 10
10 - 20 일때가 남은 값이 빼줘야 할 값이 더 클때이다.
이렇다면 돌아가서 29 남았을때 빼줘야 할 자연수는 29가 된다.
그렇게 되면 총 사용 된 자연수는 1~18까지하고, 29이다. 총 개수는 19개가 된다.
필자는 처음에 구해진 마지막 빼줘야할 값 20에 -1을 해주기로했다. 그렇게하면 19가 되는 것이다.
코드를 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); long S = Long.parseLong(br.readLine()); //빼줄 값 int N = 1; while(true) { if(S >= N) S -= N; //S보다 N이 작다면 반복을 종료해준다. else break; N++; } //--N을 해주는 이유는 N와 --는 순서상에 문제가 생기기에 N--를 하면 N을 출력하고 --를 한다. //그렇기에 빼주고 출력하기 위해 --를 앞에 두자. System.out.println(--N); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 9020번 : 골드바흐의 추측 (JAVA / 자바) (0) 2022.03.27 [백준/BOJ] 9461번 : 파도반 수열 (JAVA / 자바) (0) 2022.03.26 [백준/BOJ] 17626번 : Four Squares (JAVA / 자바) (0) 2022.03.25 [백준/BOJ] 18870번 : 좌표 압축 (JAVA / 자바) (0) 2022.03.24 [백준/BOJ] 11727번 : 2Xn 타일링 2 (JAVA / 자바) (0) 2022.03.23