728x90
SMALL
백준 문제 풀이: 3040 [백설 공주와 일곱 난쟁이]
문제 링크: https://www.acmicpc.net/problem/3040
문제 설명:
아홉 난쟁이의 모자에 적힌 숫자가 주어질 때, 이 중 가짜 두 난쟁이를 찾아내고 나머지 일곱 난쟁이의 숫자를 출력하는 프로그램을 작성하세요.
입력 조건:
- 9개의 정수가 한 줄에 하나씩 주어집니다. 각 정수는 1 이상 99 이하입니다.
- 문제에서 항상 답이 유일한 경우만 입력으로 주어집니다.
출력 조건:
- 일곱 난쟁이의 숫자를 한 줄에 하나씩 출력합니다.
문제 해결 코드
#include <iostream>
using namespace std;
int arr[9]; // 9명의 난쟁이 모자 숫자를 저장할 배열
int main() {
int totalSum = 0;
// 입력과 전체 합 계산
for (int i = 0; i < 9; i++) {
cin >> arr[i];
totalSum += arr[i];
}
// 가짜 난쟁이 찾기
int index1 = -1, index2 = -1;
for (int i = 0; i < 8; i++) {
for (int j = i + 1; j < 9; j++) {
if (totalSum - (arr[i] + arr[j]) == 100) {
index1 = i;
index2 = j;
break;
}
}
if (index1 != -1) break; // 가짜 난쟁이를 찾았으면 루프 종료
}
// 진짜 난쟁이 출력
for (int i = 0; i < 9; i++) {
if (i != index1 && i != index2) {
cout << arr[i] << '\n';
}
}
return 0; // 프로그램 정상 종료
}
코드 설명
위 코드는 아홉 난쟁이의 모자 숫자 중 두 가짜 난쟁이를 제외한 일곱 명의 숫자를 출력합니다.
- 전체 합 계산:
- `totalSum`에 아홉 난쟁이 숫자의 합을 저장합니다.
- 가짜 난쟁이 찾기:
- 이중 루프를 통해 두 난쟁이를 선택합니다.
- `totalSum - (arr[i] + arr[j])`가 100인 경우, 두 난쟁이를 가짜로 판단합니다.
- 가짜 난쟁이의 인덱스를 `index1`, `index2`에 저장하고 루프를 종료합니다.
- 출력:
- 가짜 두 난쟁이의 인덱스를 제외하고 나머지 일곱 난쟁이의 숫자를 출력합니다.
시간 복잡도 분석:
- 입력: O(9).
- 이중 루프를 통한 탐색: O(9 × 8) ≈ O(81).
- 출력: O(9).
전체 시간 복잡도는 O(81), 즉 O(1)로 상수 시간 내에서 실행됩니다.
결과
다음은 입력 예시와 출력 결과입니다:
입력:
20
7
23
19
10
15
25
8
13
출력:
7
8
10
13
19
20
23
위 입력에서는 두 가짜 난쟁이의 모자 숫자 합을 제외한 나머지 숫자가 출력됩니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 브루트포스' 카테고리의 다른 글
백준 7568번 [덩치](C++)-yes6686- 티스토리 (0) | 2024.01.03 |
---|---|
백준 2798번 [블랙잭](C++)-yes6686- 티스토리 (0) | 2024.01.02 |
백준 2231번 [분해합](C++)-yes6686- 티스토리 (0) | 2024.01.02 |
백준 1436번 [영화감독 숌](C++)-yes6686- 티스토리 (0) | 2023.12.21 |
백준 1018번 [체스판 다시 칠하기](C++)-yes6686- 티스토리 (1) | 2023.12.21 |