반응형
https://www.acmicpc.net/problem/13140
brute force 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
덧셈 결과를 입력받을 result를 선언 후 입력받습니다. 조회를 빠르게 하기 위해 unordered_map을 사용했습니다. 순열을 돌 일차원 배열 nums를 선언합니다.
📔 풀이과정
"helowrd"에 대해 임의의 수를 부여합니다. 10개 (0 ~ 9)의 숫자에서 순서 상관있게 7개를 뽑는 것과 같습니다.
1. nums에 대해 next_permutation을 수행하며 가장 왼쪽부터 7개의 수를 뽑아 내어 unordered_map에 정보를 갱신해줍니다. 'h', 'w'는 0이 될 수 없으므로 이런경우엔 continue해줍니다.
2. 뽑아낸 수 정보를 통해 a, b에 5자리의 수를 저장합니다.
3. a + b == result라면 답을 찾아낸 것이므로 적절히 출력합니다. 이때 result를 출력 시 공백에 주의합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
int result, nums[10], flag;
string word = "helowrd";
unordered_map <char, int> m;
int main(){
cin >> result;
for(int i = 0; i < 10; i++) nums[i] = i;
do{
for(int i = 0; i < word.size(); i++) m[word[i]] = nums[i];
if(m['h'] == 0 || m['w'] == 0) continue;
int a = m['h'] * 10000 + m['e'] * 1000 + m['l'] * 100 + m['l'] * 10 + m['o'];
int b = m['w'] * 10000 + m['o'] * 1000 + m['r'] * 100 + m['l'] * 10 + m['d'];
if(a + b == result){
int as = to_string(a).size();
int bs = to_string(b).size();
cout << " " << a << '\n';
cout << "+ " << b << '\n';
cout << "-------\n";
for(int i = 0; i < 7 - to_string(result).size(); i++) cout << ' ';
cout << result << '\n';
flag = 1;
break;
}
} while(next_permutation(nums, nums + 10));
if(!flag) cout << "No Answer";
}
📕 Test Case
input
183128
답
'Algorithm > Brute Force' 카테고리의 다른 글
(C++) - 백준(BOJ) 13908번 : 비밀번호 (0) | 2021.09.27 |
---|---|
(C++) - 백준(BOJ) 17265번 : 나의 인생에는 수학과 함께 (0) | 2021.09.25 |
(C++) - 프로그래머스(2020 카카오 인턴십) : 수식 최대화 (0) | 2021.09.06 |
(Javascript) - 백준(BOJ) 21275번 : 폰 호석만 (0) | 2021.08.28 |
(C++) - 백준(BOJ) 20167번 : 꿈틀꿈틀 호석 애벌레 - 기능성 (0) | 2021.08.17 |