알고리즘 문제/2024 AOC
[2024 AOC] 2일차 CPP
odaebum
2024. 12. 3. 01:03
728x90
Advent of Code 2024
adventofcode.com
문제 1번 풀이
#include <iostream>
#include <vector>
#include <string>
using namespace std;
const int INPUT_MAX = 1000;
const int DIFF_LEVEL = 3;
bool sol(vector<int> v){
bool increase = true;
for(int i = 0; i < v.size()-1; i++){
if(abs(v[i] - v[i+1]) > DIFF_LEVEL) return false;
if(v[i] == v[i+1]) return false;
if(i == 0){
increase = v[i] < v[i+1];
}
else{
if(increase){
if(v[i] >= v[i+1]) return false;
}
else{
if(v[i] <= v[i+1]) return false;
}
}
}
return true;
}
int main(){
vector<int> levels;
string str;
int answer = 0;
for(int i = 0; i < INPUT_MAX; i++){
getline(cin, str);
levels.clear();
string tmp = "";
for(int i = 0; i < str.length(); i++){
char c = str[i];
if(c == ' '){
levels.push_back(stoi(tmp));
tmp = "";
}
else{
tmp += c;
}
}
levels.push_back(stoi(tmp));
bool res = sol(levels);
if(res){
answer++;
}
}
cout << answer << endl;
return 0;
}
문제 2번 풀이
#include <iostream>
#include <vector>
#include <string>
using namespace std;
const int INPUT_MAX = 1000;
const int DIFF_LEVEL = 3;
bool sol(vector<int> v){
bool increase = true;
for(int i = 0; i < v.size()-1; i++){
if(abs(v[i] - v[i+1]) > DIFF_LEVEL) return false;
if(v[i] == v[i+1]) return false;
if(i == 0){
increase = v[i] < v[i+1];
}
else{
if(increase){
if(v[i] >= v[i+1]) return false;
}
else{
if(v[i] <= v[i+1]) return false;
}
}
}
return true;
}
bool process(vector<int> v){
for(int i = 0; i < v.size(); i++){
vector<int> tmp = v;
tmp.erase(tmp.begin()+i);
if(sol(tmp)) return true;
}
return false;
}
int main(){
vector<int> levels;
string str;
int answer = 0;
for(int i = 0; i < INPUT_MAX; i++){
getline(cin, str);
levels.clear();
string tmp = "";
for(int i = 0; i < str.length(); i++){
char c = str[i];
if(c == ' '){
levels.push_back(stoi(tmp));
tmp = "";
}
else{
tmp += c;
}
}
levels.push_back(stoi(tmp));
bool res = process(levels);
if(res){
answer++;
}
}
cout << answer << endl;
return 0;
}
문제 풀이 1번에 현재 가지고 있는 숫자 중에서 1개를 제외했을 때 Safe한 것이 있으면 return true;
728x90