링크
https://www.acmicpc.net/problem/1107
풀이
채널 N으로 이동할 때 100번에서 +, - 로만 이동하는 방법과 고장나지 않은 버튼으로 누를 수 있는 번호를 누르고 필요시 +, -로 이동하는 방법 중 최소의 값을 구했습니다.
처음 제출할 때 초기 ans값을 초기화 하는 과정에서 아무 생각 없이 0으로 잡아 틀렸는데 문제를 풀 때 멍때리지 말고 차근 차근 생각하면서 풀어야 겠다고 느꼈습니다 (자의적인 해석 ❌ 문제 꼼꼼히 읽기 ⭕)
코드
#include <iostream>
#include <vector>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
bool broken[10]; // 고장난 버튼 체크
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int b;
cin >> b;
broken[b] = true;
}
int ans = -987654321;
int size = 9;
for (int i = 0; i < pow(10, 6); i++) {
string s = to_string(i);
bool flag = true; // 고장난 버튼을 누르지 않아도 되면 true, 눌러야 하면 false
for (int i = 0; i < s.size(); i++) {
if (broken[s[i] - '0']) flag = false;
}
if (flag) {
if (abs(i - n) + s.size() < abs(ans - n) + size) {
ans = i;
size = s.size();
}
}
}
cout << min(abs(n - 100), abs(ans - n) + size); // 100번에서 +,-를 누르는 경우와 번호를 누른 후 +, -를 누르는 경우 중 최소값
return 0;
}
'Koala - 5기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[BOJ / JAVA] 15654번 - N과 M(5) (0) | 2022.01.13 |
---|---|
[BOJ / c++] 2798번 - 블랙잭 (2) | 2022.01.12 |
[BOJ / c++] 13423 - Three Dots (1) | 2022.01.11 |
[BOJ / python] 1969 : DNA (0) | 2022.01.11 |
[BOJ / Swift] 13423 - Three Dots (0) | 2022.01.10 |