2022. 5. 9. 01:10ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/18679
18679번: Banana
The first line of input will contain a single integer N, the number of words in the dictionary (1 ≤ N ≤ 100). The following N lines will each contain a sentence of the format x = y where x is an English word and y is a Minionese word. The next line wil
www.acmicpc.net
접근 방법 - 문자열과 배열 사용의 응용문제
백준의 18679번 문제는 문자열과 배열을 응용하여 해결해야 하는 문제이다.
해당 문제는, 입력받은 단어에 대해 대체 가능한 단어를 사용해서 새로운 문자열을 생성하여 출력해야 하는 문제이다.
따라서 이 문제의 경우엔, 배열을 통해 관련 있는 두 단어를 연결하고 이를 통해 새로운 문자열을 생성하여 해답을 구하면 된다.
그렇기 때문에 문자열과 배열을 능숙하게 다룰 수 있다면 어렵지 않게 풀 수 있는 문제로 예상된다.
하지만 아직 이에 대해 미숙하다면 아래의 설명과 코드를 참고해보길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 단어 쌍을 차례로 입력받을 배열(arr)을 전역 변수로 선언해둔다.
2) 단어 쌍의 개수(n)를 입력받는다.
3) n의 크기만큼, 단어 쌍을 순차적으로 입력받아 arr에 저장한다.
(다만 여기서, "="는 굳이 저장할 필요가 없기 때문에 char형 변수 equal을 통해 입력값을 받을 때에만 사용하고 추후에 따로 사용하지는 않도록 한다.)
4) 테스트 케이스의 수(cnt)를 입력받는다.
5) cnt의 크기만큼 반복문을 실행하여, 아래의 연산을 취한다.
- 문자열의 길이(num)를 입력받고, num의 크기만큼 문자열(st)을 하나씩 입력받는다.
- arr에 저장된 문자열 중 st와 동일한 문자열이 있는지 탐색한다. 발견할 시, 이와 연결된 문자열로 대체하여 출력한다.
- 공백도 적절히 섞어가며 출력하여 정답을 구한다.
- 해당 테스트 케이스의 정답을 모두 출력하였다면 개행을 하여 다음 테스트 케이스를 수행한다.
6) 5)의 과정에서 모든 출력이 완료되었다면, 실행 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;
//백준 18679번 코드
string arr[2][100];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
char equal;
for (int i = 0; i < n; i++) {
cin >> arr[0][i] >> equal >> arr[1][i];
}
int cnt;
cin >> cnt;
for (int i = 0; i < cnt; i++) {
int num;
cin >> num;
for (int j = 0; j < num; j++) {
string st;
cin >> st;
for (int k = 0; k < n; k++) {
if (arr[0][k] == st) {
cout << arr[1][k]; break;
}
}
cout << " ";
}
cout << endl;
}
}
제출 결과
(2022.04.09 백준 18679번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 1110번 더하기 사이클 (C++/cpp) (0) | 2022.05.10 |
---|---|
[백준 BOJ] 1316번 그룹 단어 체커 (C++/cpp) (0) | 2022.05.09 |
[백준 BOJ] 15733번 나는 누구인가 (C++/cpp) (1) | 2022.05.08 |
[백준 BOJ] 4562번 No Brainer (C++/cpp) (0) | 2022.05.08 |
[백준 BOJ] 5618번 공약수 (C++/cpp) (0) | 2022.05.07 |