2025. 12. 12. 15:50ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/14709


접근 방법 - 배열을 활용한 구현 문제
백준의 14709번 문제는 배열을 활용하여 문제를 해결할 수 있는 기초적인 구현 문제이다.
해당 문제는, 닿아있는 손가락의 쌍이 입력으로 주어질 때 해당 손동작이 여우 사인을 나타내는지를 정해진 형식대로 출력하면 되는 문제이다.
이때, 문제에서 설명하는 여우 사인은 아래와 같으니 문제 해결에 함께 참고하길 바란다.
- 엄지(1번째)-중지(3번째)-약지(4번째)가 모두 함께 닿아있어야 한다.
- 검지(2번째)-새끼손가락(5번째)은 어느 손가락과도 닿지 않아야 한다.
필자는 임의의 배열을 통해 어느 것과 닿아있는 손가락인지에 대한 여부를 저장하도록 하고, 이를 통하여 문제 해결을 시도해 보았다.
자세한 설명은 아래에 기재해 놓으니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해 보길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 손가락의 접촉 여부를 저장할 배열 finger을 전역 변수로 미리 선언해 둔다.
(어느 것과도 닿아있지 않다면 0 값을 유지하고, 닿아있다면 1의 값을 가지게끔 설정할 예정이다.)
2) 닿아있는 손가락 쌍의 개수(n)를 입력받는다.
3) 여우 사인인지에 대한 여부를 저장할 변수 nothing을 0으로 초기화하여 선언한다.
(초기값인 0을 유지한다면 여우 사인임을, 유지하지 못한다면 여우 사인이 아님을 뜻하게끔 판별할 예정이다.)
4) n의 크기만큼, 반복문을 수행하여 아래의 연산을 취한다.
- 닿아있는 두 손가락의 번호(a, b)를 입력받는다.
- a와 b 손가락이 서로 닿아있음을 뜻하게끔, 그에 상응하는 2군데의 finger 배열값에 1씩 더하도록 한다.
- 만약 a나 b가 2 또는 5의 값을 가진다면, 이는 여우 사인의 손을 하고 있지 않다고 볼 수 있다. 따라서 이 경우에는, nothing에 1을 추가하도록 한다.
5) 4)에서 입력 및 연산을 완료하였다면, 여우 사인에 대한 예외적인 케이스를 판별하도록 조건식을 추가로 실행한다.
1, 3, 4번 손가락들 중 단 한 쌍이라도 맞닿아있지 않다는 값을 finger에서 가지고 있다면, 이 또한 여우 사인의 손을 하고 있다고 보기 어렵기 때문에 nothing에 1을 추가하도록 한다.
6) 현재까지 저장된 nothing의 값에 따라 정답을 출력한다.
nothing이 0의 값을 유지하고 있다면, 이는 여우 사인임을 뜻하기 때문에 그에 대응되는 문자열("Wa-pa-pa-pa-pa-pa-pow!")을 정답으로 출력하도록 한다.
다만 nothing이 0 이외의 값을 갖고 있다면, 이는 여우 사인이 아님을 뜻하기 때문에 그에 대응되는 문자열("Woof-meow-tweet-squeek")을 정답을 출력하도록 한다.
7) 6)에서 답을 출력하였다면, 실행을 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;
//백준 14709번 코드
int finger[6][6];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
int nothing = 0;
for (int i = 0; i < n; i++) {
int a, b;
cin >> a >> b;
if (a == 2 || a == 5 || b == 2 || b == 5) { nothing = 1; }
finger[a][b]++; finger[b][a]++;
}
if (!(finger[1][3] == 1 && finger[1][4] == 1 && finger[3][4] == 1)) {
nothing = 1;
}
if (nothing == 0) {
cout << "Wa-pa-pa-pa-pa-pa-pow!" << endl;
}
else {
cout << "Woof-meow-tweet-squeek" << endl;
}
}
제출 결과

(2022.10.21 백준 14709번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
| [백준 BOJ] 14910번 오르막 (C++/cpp) (0) | 2025.12.15 |
|---|---|
| [백준 BOJ] 1543번 문서 검색 (C++/cpp) (0) | 2025.12.12 |
| [백준 BOJ] 3460번 이진수 (C++/cpp) (0) | 2025.11.15 |
| [백준 BOJ] 1920번 수 찾기 (C++/cpp) (0) | 2025.08.31 |
| [백준 BOJ] 31261번 НАМИСЛИХ СИ ЧИСЛО (C++/cpp) (1) | 2025.08.03 |