문제 해설
문제에서 주어지는 정수들을 모두 더한 합을 구하는 문제입니다. 단, 0이 입력 될 때 마다 가장 마지막에 불렀던 숫자를 합계에서 빼야 합니다.
문제 풀이 계획
필요 변수
변수명 | 타입 | 초기값 | 설명 |
K | int | 첫째 줄에 주어지는 정수 | |
sum | int | 0 | 부른 숫자를 모두 더한 합 (문제에서 수의 합이 2^31-1 보다 작다고 했으므로 int 형을 사용해도 된다.) |
arr | int[] | 부른 숫자를 저장할 배열 | |
pos | int | 0 | 배열의 마지막 인덱스를 가리키는 변수 |
해결 로직
- K를 입력 받는다.
- K 번 만큼 숫자를 입력 받는다.
- 0이라면 arr[--pos] (배열의 가장 마지막 인덱스 원소)를 sum에서 뺀다.
- 0이 아니라면 arr[pos]에 숫자를 삽입하고 sum에 더한다.
- sum을 출력한다.
풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static int K;
public static int sum = 0;
public static int[] arr;
public static int pos = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// 1. K를 입력 받는다.
K = Integer.parseInt(st.nextToken());
arr = new int[K];
while(K-- > 0) {
// 2. K 번의 명령어를 입력 받는다.
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()) {
// 3. 숫자에 따라 분기 처리한다.
int num = Integer.parseInt(st.nextToken());
if(num == 0) {
sum -= arr[--pos]; // pos-1 한 후 arr[pos]값을 sum에서 뺀다.
} else {
arr[pos++]=num; // arr[pos]에 값을 삽입 후 pos+1 한다.
sum+=num;
}
}
}
// 4. 출력한다
System.out.println(sum);
}
}
이번 문제처럼 출력이 단순한 문제의 경우, BufferedWriter 대신 System.out.print를 사용해도 무방할 것 같습니다.
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
'개발 > Problem Solving' 카테고리의 다른 글
백준 2164 카드2 - Java 자바 문제 풀이 (1) | 2024.02.08 |
---|---|
백준 10845 큐 - Java 자바 문제 풀이 (1) | 2024.02.08 |
백준 2493 탑 - Java 자바 문제 풀이 (0) | 2024.02.06 |
백준 1874 스택 수열 - Java 자바 문제 풀이 (0) | 2024.02.06 |
백준 10828 스택 - Java 자바 문제풀이 (0) | 2024.02.06 |