반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬
- 경제뉴스 요약
- Python
- 손에 잡히는 경제
- 상한가
- 급등주 분석
- 자바
- 테마주
- 주식 분석
- 경제뉴스
- 급등주
- 코딩테스트
- 주식
- 코테
- 손경제
- 손에 잡히는 경제 요약
- 이진우
- Programmers
- 급등 이유
- boj
- 알고리즘
- 상한가 분석
- java
- 이진우의 손에 잡히는 경제
- 경제
- 손경제 요약
- 백준
- 상한가 이유
- 주식 상한가
- 프로그래머스
Archives
- Today
- Total
Completion over Perfection
백준 2003 - 수들의 합2 (JAVA 자바) 본문
반응형
백준 2003 - 수들의 합2 (JAVA 자바)
https://www.acmicpc.net/problem/2003
투포인터의 개념만 공부하고 스스로 풀어보려고 노력을 했습니다.
(왼쪽/오른쪽을 이동시켜가면서 구간합을 그때그때 구하는 개념)
코드짜면서 미쳐 생각하지 못했던 포인트들과 주의해야할 점은 아래 정리해 두었습니다.
<중요포인트>
1. 예를들어 첫번째부터 세번째 숫자까지의 합을 구해야 될 경우, for문을 써서 합을 다 더해줘야 합니다.
저는 바보같이 수치가 저장된 배열에서 첫번째부터 세번째까지의 합을 구해야할 경우,
map[1] + map[3] 이런식으로 짰던 적이 있어서 틀렸었습니다.
2. left와 right가 모두 N에 다다를때까지 while 문을 돌려줘야 합니다. (부등호 "<=" 을 사용해서 while문을 돌립시다)
3. 숫자하나만으로도 M값이 충족되는 경우가 있으므로 이 부분도 처리해줘야 합니다.
(left와 right가 일치하는 경우의 로직을 짜주면 되겠죠?)
4. 일반적으로는 left값이 right값을 초과하지 않지만, left값이 right값을 초과하는 케이스가 있습니다.
이럴경우 어떻게 처리할지를 생각해봐야 합니다.
5. sum 값이 int의 범위를 넘어설 수도 있습니다. long으로 선언하는게 좋습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import java.io.*;
import java.util.*;
class upgrade{
static int N;
static long M;
public static void main(String args[]) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); // 4
M = Long.parseLong(st.nextToken()); // 2
int map[] = new int[N+1];
st = new StringTokenizer(br.readLine());
for(int i=1; i<=N; i++){
map[i] = Integer.parseInt(st.nextToken());
}
int left = 1;
int right = 1;
int ans = 0;
while(left<=N && right<=N){
long sum = 0;
if (left == right && left <=N && right <=N) sum += map[left];
else if (left != right && left <=N && right <=N){
for(int i=0; i<=right-left; i++){
sum += map[left+i];
}
}
if (sum < M && right <= N) {
if (right == N) left += 1;
else{
right += 1;
}
}else if (sum > M && left <= N) {
if (left == N) right += 1;
else{
left += 1;
}
} else if (sum == M){
ans ++;
left += 1;
}
}
bw.write(ans + "\n");
bw.flush();
bw.close();
}
}
|
cs |
반응형
'자바 (Java)' 카테고리의 다른 글
백준 1008 - A / B (JAVA) (0) | 2023.02.09 |
---|---|
백준 10998 - A x B (JAVA) (0) | 2023.02.08 |
백준 1001 - A - B (JAVA) (0) | 2023.02.07 |
백준 11053 - 가장 긴 증가하는 부분 수열 (JAVA 풀이) (0) | 2023.02.03 |
[JAVA] 인텔리제이 IntelliJ Cannot resolve symbol 에러 해결 (0) | 2022.10.28 |
Comments