📌 문제
문제명 | [백준] 25304 - 영수증 |
Link | https://www.acmicpc.net/problem/25304 |
분류 | 반복문, 구현 |
난이도 | B4 |
풀이 일자 | 2025-04-09 |
📌 문제 탐색하기
구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes, 일치하지 않으면 No 출력
문제에서 제시하는 변수
X : 영수증에 적힌 총 금액
N : 영수증에 적힌 구매한 물건의 종류의 수
a : 물건의 가격
b : 물건의 개수
📌 코드 설계하기
1. 총 금액 X를 입력 받기
2. 물건의 종류의 수 N를 입력받기
3. N의 수 만큼 반복문을 실행
4. 반복문에서 a(물건의 가격)와 b(물건의 개수) 입력 받고 split함수를 통해 각각 구분함
5. 구분한 변수 a와b를 정수형으로 변환하고 곱하고 결과값을 sumPrice변수에 합함
6. 반복문의 끝날때까지 위의 4번과 5번을 진행함
7. X(영수증 총 금액)와 sumPrice 일치하면 Yes출력, 불일치하면 No출력
📌 시도 회차 수정 사항 (Optional)
없음
📌 정답 코드
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
/**
* X : 영수증에 적힌 총 금액
* N : 영수증에 적힌 구매한 물건의 종류의 수
* a : 물건의 가격
* b : 물건의 개수
* sumPrice : 물건의 가격과 물건의 개수를 합한 가격
*/
int X = Integer.parseInt(br.readLine());
int N = Integer.parseInt(br.readLine());
int sumPrice = 0;
// N의 수만큼 반복문 실행
for (int i = 0; i < N; i++) {
String[] splitPrice = br.readLine().split(" ");
int a = Integer.parseInt(splitPrice[0]);
int b = Integer.parseInt(splitPrice[1]);
sumPrice += a * b;
}
bw.write(X == sumPrice ? "Yes" : "No");
bw.flush();
bw.close();
}
📌 느낀점
꾸준하게 하는게 중요하다
📌 시간복잡도
각 단계별로 시간복잡도
- 영수증에 적힌 총 금액 (x)를 입력받습니다.
- → O(1)
- 영수증에 적힌 구매한 물건의 종류의 수(n)을 입력 받습니다.
- → O(1)
- 전체 금액을 계산할 변수를 선언하고 초기화 합니다.
- → O(1)
- N개의 물건의 가격과 개수를 입력받고, 전체 금액에 합산합니다.
- → O(N)
- 문제 조건에 맞게 정답을 출력합니다.
- → O(1)
이 문제의 최종 시간복잡도는 O(N)입니다.
이 문제에서 N은 최대 100이므로, 최대 100개의 연산이 필요하며 이는 시간안에 가능한 연산 개수 입니다.
🍯 TIP ! 시간 복잡도는 전체 코드를 살펴보았을 때 가장 큰 연산(가장 느리게 증가하는 부분)을 기준으로 계산됩니다. (상수와 작은 항은 무시합니다.)
- ex) O(2N + N^2) == O(N^2)
시간복잡도의 느린(큰) 순서는 O(1), O(logN) , O(N) , O(NlogN) , O(N^2) … 와 같은 순서로 나열됩니다.
이 문제에서 O(N)의 시간복잡도가 가장 큰 연산이므로, 최종 시간복잡도는 O(N)으로 계산됩니다.
'알고리즘, 자료구조' 카테고리의 다른 글
[코딩 챌린지 11기 새싹반] 백준 2738 - 행렬 덧셈 (Java) (1) | 2025.04.12 |
---|---|
[코딩 챌린지 11기 새싹반] 백준 10818 - 최소, 최대 (Java) (1) | 2025.04.11 |
[코딩 챌린지 11기 새싹반] 백준 8393 - 합 (0) | 2025.04.10 |
[코딩 챌린지 11기 새싹반] 백준 15552 - 빠른 A+B (0) | 2025.04.08 |
[코딩 챌린지 11기 새싹반] 백준 11382 - 꼬마 정민 (0) | 2025.04.07 |