![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFSNQV%2FbtqThYWjRqF%2FSrIxRsOTiIp061pUK1Fm60%2Fimg.png)
정올 문제라 한다. 생각을 살짝만 뒤집으면 아주 쉽게 풀수 있는 그리디 문제가 된다. 핵심은 "반드시 앞 도시에서 기름을 미리 쟁여둘 필요가 없다" 이다. 뒤의 모든 도시들을 보고 나중에 기름이 필요할거 같으니 사두는건 너무 복잡한 행위다. 그냥 뒤의 도시에 가보고 기름가격이 더 비싸면 지난 도시에서 기름을 사도 되는 것이다. 최첨단 이동장치가 있어서 기름이 배달이된다 생각하면 되려나 ㅋㅋㅋㅋ 아무튼 이렇게 문제를 보게 되면 문제는 단순히 가장 적은 기름값을 지니는 도시의 위치를 기억해뒀다가 그 위치의 기름을 계속 사들이기만 하면 되는 그리디 문제가 된다. #include #define INF 1000000007 typedef long long int ll; int road[123456] = {0}; i..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfaY4f%2FbtqS4MvYgw5%2FUWAJb6XhE2bU78Ywy7zpc1%2Fimg.png)
맞왜틀 ㅡㅡ 뇌절좀 친 문제였다. 팰린드롬을 만들 수 있는 문자열의 특징은 각 문자가 짝수개이여야 하는데, 홀수개인 문자는 하나만 존재하거나 없어야 한다. 이 특성에 맞는지 체크한다음, 아니면 I'm Sorry Hansoo를, 맞다면 팰린드롬으로 출력하면 되는 문제이다. #include #include #include int alpha[1234] = {0}; char arr[100] = {0}; int main(){ scanf("%s", arr); int len = strlen(arr); char out=0; for(int i=0; i
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOn4qQ%2FbtqTjD43gFX%2Fc3EqgJOyaArKVAf5K7vuy0%2Fimg.png)
큰 수에는 그냥 파이썬 박자..... (해탈) 수 범위가 엄청나게 크고 아름다워서 unsigned long long int 박아도 안뚫린다 문자열로 받아서 직접 더하는 함수 짜던지 그냥 파이썬 쓰자. n = int(input()) arr = list(range(0,n+1)) for i in range(2,n+1): arr[i] = arr[i-1] + arr[i-2] print(arr[n]) 깔끔하게 AC. 근데 파이썬이 느리긴 한지 채점이 엄청 오래걸렸다.
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEoV6q%2FbtqTcPLYjJR%2FET8Kb5lUS8Kn4FX5DuRgB0%2Fimg.png)
C++17 백준 컴파일러가 gets를 지원 안해서 좀 골치아픈 문제. fgets로 해결했다 일단. www.acmicpc.net/problem/1543 1543번: 문서 검색 세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한 www.acmicpc.net fgets를 통해 문자열을 받고 단어가 등장하는걸 확인한 경우에는 단어의 길이만큼 인덱스를 건너뛰게 하는 방법으로 중복을 막았다. #include #include #include char arr[3456] = {0}; char input[123] = {0}; bool compare(int idx, char *s1, ch..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUjIbw%2FbtqTjDjBOUF%2FyU2TV4ZghLy5P0fbj9TOJk%2Fimg.png)
map의 특성을 이용해보려고 했는데 뇌절친거같다..... 최대한 가독성있게 만들어보았다 그래도... #include #include #include #include #include using namespace std; map m; vector v; int main(){ int n; string tmp; cin >> n; for(int i=0; i> tmp; if(m.find(tmp) == m.end()) m.insert({tmp,1}); else m[tmp]++; } for(auto it=m.begin(); it!=m.end(); it++) v.push_back({-it->second, it->first}); sort(v.begin(), v.end()); cout
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTPABx%2FbtqS29kAeWi%2FrBCFdxRWKl0zD41j2SchJk%2Fimg.png)
브루트포스문제 수가 워낙 작아서 ㄹㅇ 무식하게 풀 수 있었다. www.acmicpc.net/problem/3085 3085번: 사탕 게임 첫째 줄에 상근이가 먹을 수 있는 사탕의 최대 개수를 출력한다. www.acmicpc.net 원래는 O(N^2)에 dx dy 넣어서 판별하는거겠지만 dxdy 세그폴트안나게 잘 관리하는거도 걍 귀찮아서 x1 y1 x2 y2 뽑아놓고 둘이 바로 옆에있으면 계산하게끔 짜서 시간복잡도가 O(N^4)다.... #include char arr[51][51] = {0}; int n; int ans=0; int abs(int a){return a>0?a:a*-1;} int max(int a, int b){return a>b?a:b;} void swap(int x1,int y1, in..