๋ฌธ์ : https://www.acmicpc.net/problem/2018
2018๋ฒ: ์๋ค์ ํฉ 5
์ด๋ ํ ์์ฐ์ N์, ๋ช ๊ฐ์ ์ฐ์๋ ์์ฐ์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค. ๋น์ ์ ์ด๋ค ์์ฐ์ N(1 ≤ N ≤ 10,000,000)์ ๋ํด์, ์ด N์ ๋ช ๊ฐ์ ์ฐ์๋ ์์ฐ์์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๊ฐ์ง์๋ฅผ ์๊ณ ์ถ์ดํ
www.acmicpc.net
์ฑ
์์ ํฌ ํฌ์ธํฐ์ ๋ค์ด๊ฐ ๋ ๊ฐ์ฅ ์ฒ์์ผ๋ก ๋์ค๋ ๋ฌธ์ ๋ค.
๋ฌธ์ ๋.. ์๊ณ ๋ฆฌ์ฆ์ด ๋งค์ฐ ๊ฐ๋จํ๋ค๋ฉฐ ๋ฐ๋ก ์ค์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ ๋ง๊ณผ ํจ๊ป ๋ฑ์ฅํ๋ ๋ฌธ์ ๋ผ๋ ๊ฒ์ด๋ค.
๋นํฉ์ค๋ฝ์ง๋ง ์ฐ๋ฆฌ๋ ํ์ด์ผ ํ๋ค.
๋ฌธ์ ๋ฅผ ๋ณด๋ฉด 15๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ๊ฐ ์๋ค๊ณ ํ๋ค. 7+8, 4+5+6, 1+2+3+4+5.
์ด ๋ฐฉ๋ฒ๋ค์ด ์ด ๋ช ๊ฐ์ธ์ง ์ถ๋ ฅํ๋ฉด ๋๋ ๊ฐ๋จํ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ๋ก๋ ๊ฐ๋จํ์ง๋ง ๋ง์ ์ง๋ ค๊ณ ํ๋ฉด ์ ๋ชจ๋ฅด๊ฒ ๋๊ฒ ์ฌ์ค์ด๋, ์์ธํ ํฌ ํฌ์ธํฐ์ ๊ฐ๋
์ "ํฌ ํฌ์ธํฐ" ๊ธ์จ๋ฅผ ๋๋ฌ์ฃผ๊ธธ ๋ฐ๋๋ค.
๋ฐฐ๊ฒฝ์์ผ๋ก ์
ํ์ ธ์๋ ํฌ ํฌ์ธํฐ ๊ธ์จ๋ค์ ๋ชจ๋ ๊ทธ์ ํด๋นํ๋ ๊ธ์ ๋งํฌ๋ก ๋์ด ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋ค.
๊ทธ๋ผ ์ด์ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์ด๋ค ๊ฐ๋
์ด ํ์ํ์ง ์์์ผ๋, ์ด๋ค ๋ฐฉ์์ผ๋ก ์ง์ผ ํ๋๊ฐ๋ฅผ ์์๋ณด์.
์ด ๋ฌธ์ ๋ ๊ฐ์ ๋ฐฉํฅ์์ ์งํํ๋ ํฌ ํฌ์ธํฐ ํ๋ฆ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ง๋ ๊ฒ์ด ํธํ๋ค.
์๋ํ๋ฉด, ์์ ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์ ํด์ ๋ํ ๊ฒ์ด 15๊ฐ ๋๋์ง ์ฒดํฌ๋ฅผ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๋ฆฌํ์๋ฉด
•์์๋๋ก ๋์ ํฉ์ ํด์ N์ ์ฐพ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์งํ๋ฐฉํฅ์ด ๊ฐ์ ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์งํํ๋ ๊ฒ์ด ํธํ๋ค.
๋๋จธ์ง๋ ์ฝ๋๋ก ์์๋ณด์.
์ฝ๋๋ ์ด 2๊ฐ์ ๋ฒ์ ์ด ์๋ค.
์ฒซ๋ฒ์งธ ๋ฒ์ ์ ๋ฐฐ์ด์ ์ฐ์ง ์์ ํ์ด์ด๊ณ , ๋๋ฒ์งธ ๋ฒ์ ์ ๋ฐฐ์ด์ ์ฌ์ฉํ ํ์ด์ด๋ค.
import java.io.*;
public class BOJ_2018_5 {
public static void main(String[] args) throws IOException{
// TODO ๋ฐฑ์ค 2018
//์
๋ ฅ์ ๋นจ๋ฆฌ ๋ฐ๊ธฐ ์ํด์ BufferedReader ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ ์ธํด์ค๋ค.
//์ฌ๋ฌ ์ซ์๋ค์ ํ ์ค์ ์ฌ๋ฌ๊ฐ๋ฅผ ๋ฐ์ผ๋ฉด ์ซ์๋ค์ ํ์ฑํ ํ์๊ฐ ์์ง๋ง,
//์ด๋ฒ์ ์
๋ ฅ์ ํ ์ค์ ํ๋ฒ๋ง ๋ฐ๊ธฐ ๋๋ฌธ์ StringTokenizer ํด๋์ค ๊ฐ์ฒด๋ ์ ์ธํ์ง ์๋๋ค.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//ํ ์ค์ ์ซ์ ํ๋๋ฅผ ์
๋ ฅ๋ฐ์ ๊ฒ์ intํ์ผ๋ก ํ๋ณํ์์ผ์ฃผ๊ณ N์ ์ ์ฅํ๋ค.
int N = Integer.parseInt(br.readLine());
//start๋ ์์ ์ซ์, end๋ ๋ ์ซ์, sum์ start์ end๋ฅผ ๋ํ ๊ฐ,
//answer๋ ๋ํด์ N์ด ๋๋ ๊ฐ์์ ๋ํ ๋ณ์๋ค.
int start = 1, end = 1, sum = 1, answer = 1;
//ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ
//start < N์ ์กฐ๊ฑด์ผ๋ก ๋ฌ์ ์ด์ ๋ while๋ฌธ์ ๋ฐ๋ณต๋ฌธ ๋ด์ฉ์ด ์งํ๋๋ค๊ฐ ์กฐ๊ฑด์ ์ด๊ธ๋๋ฉด
//๋ฐ๋ก ๋ฐ๋ณต๋ฌธ์ด ์ข
๋ฃ๋๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ start <= N ์กฐ๊ฑด์ผ๋ก ํ์ง ์์๋ค.
while(start < N) {
//start ์ซ์์ end ์ซ์๋ฅผ ๋ํ ๊ฐ์ด N๊ณผ ๊ฐ์ผ๋ฉด
//answer๋ฅผ ๋๋ ค์ฃผ๊ณ start๋ฅผ ์ ๊ฑฐํด์ค๋ค.
//์๋ํ๋ฉด ์ด๋ฏธ ํ์ฌ ์์ํญ์ ํฌํจํ end๊ฐ๊น์ง ๋ํ ๊ฒฝ์ฐ๋ฅผ answer์ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
//๋ฐ๋ผ์ ์ ๊ฑฐํด์ค ๋ค์, start๋ฅผ ํ๋ ๋๋ ค์ ๋ค์ ์ผ์ด์ค๋ฅผ ์ฐพ๋๋ค.
if(sum == N) {
++answer;
sum -= start;
++start;
} else if(sum < N) {
//sum์ด N๋ณด๋ค ์๋ค๋ฉด sum์ ๋๋ ค์ค์ผ ํ๋ฏ๋ก end๋ฅผ ๋๋ ค์ค์ผ ํ๋ค.
//๋๋ ค์ค ๋ค์, sum์ end๋ฅผ ๋ํด์ค๋ค.
++end;
sum += end;
} else {
//๊ทธ ๋ฐ์ ์ผ์ด์ค๋ผ๋ฉด sum > N์ธ๋ฐ, ์ด ๊ฒฝ์ฐ์๋ ์ซ์๋ฅผ ์ค์ฌ์ค์ผ ํ๊ธฐ ๋๋ฌธ์
//start๋ฅผ sum์์ ์ ๊ฑฐํด์ฃผ๊ณ
//start๋ฅผ 1์ฉ ๋๋ ค์ค๋ค.
sum -= start;
++start;
}
}
//๊ทธ๋ ๊ฒ ๊ตฌํด์ง ๋ต์ ์ถ๋ ฅํด์ค๋ค.
System.out.println(answer);
}
}
import java.util.*;
import java.io.*;
public class BOJ_2018_3 {
public static void main(String[] args) throws IOException{
// TODO ๋ฐฑ์ค 2018๋ฒ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int[] nums = new int[N+1];
//๋ฐฐ์ด ๊ฐ ์นธ๋ง๋ค ์ซ์๋ฅผ ์์๋๋ก ์ ์ฅํด์ค๋ค.
for(int i=0; i<=N; i++) {
nums[i] = i;
}
//sum์ด nums[0]์ธ ์ด์ ๋ sum์ด 0์ด๊ฒ ๋๋ฉด ๋ฐฐ์ด์ ์ฒซ ํญ์ด
//๋์ ํฉ์ ๋ค์ด๊ฐ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
int start = 0, end = 0;
int sum = nums[0];
int answer = 1;
//ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ
while(end <= N-1) {
if(sum == N) {
++answer;
++end;
sum += nums[end];
} else if(sum < N) {
++end;
sum += nums[end];
} else if(sum > N) {
sum -= nums[start];
++start;
}
}
System.out.println(answer);
}
}
์ด ๋ ๋๋ฒ์งธ ์ฝ๋๋ณด๋จ ์ฒซ๋ฒ์งธ ์ฝ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ ๋ ์ก์๋จน์ผ๋ฉฐ ์๋๋ ์ข ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์,
์ฑ
์์๋ ์ฒซ๋ฒ์งธ ๋ฒ์ ์ ์ฑํํ๊ฒ ์๋๊น ์ถ๋ค.
'โJAVA > ๐ฉโ๐ปBOJ(๋ฐฑ์ค)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํฌ ํฌ์ธํฐ, JAVA] ๋ฐฑ์ค - 1253 (0) | 2022.09.20 |
---|---|
[ํฌ ํฌ์ธํฐ, JAVA] ๋ฐฑ์ค - 1940 (2) | 2022.09.20 |
[ํฌ ํฌ์ธํฐ, JAVA] ๋ฐฑ์ค - 2467 (0) | 2022.09.19 |
[๊ตฌ๊ฐํฉ, JAVA] ๋ฐฑ์ค - 10986 (0) | 2022.08.20 |
[๊ตฌ๊ฐํฉ, JAVA] ๋ฐฑ์ค - 11660 (0) | 2022.08.17 |