![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmeGSA%2FbtqTjDRMWMl%2FZyxyWZQCPscpq3yj8Be2v1%2Fimg.png)
베이직한 투 포인터 www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net 번호를 정렬한 뒤 가장 앞 값과 가장 뒷 값의 인덱스를 변수로 잡는다 만약 더했을때 m과 같다면, 갑옷을 만드는데 사용하므로 앞값++, 뒷값--를 동시에 해주고 m보다 크다면 뒷값이 너무 큰 경우이므로 뒷값--만, m보다 작다면 앞값이 너무 작은 경우이므로 앞값++만 해주면 O(N)정도에 끝낼수 있다. #include #include using namespace st..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuoQUA%2FbtqS4MbmUZM%2F3rj8Ko04okKpaiw0cX1Hb0%2Fimg.png)
출력 형식을 지키자!!!!! (복창중) 스위치 바꿀때의 팁! ^= 1 연산을 통해서 1이면 0으로, 0이면 1으로 바꿔줄수 있다. 그냥 구현문제라 뭐 설명할것도 별로 없다... #include int swit[123] = {0}; int main(){ int n,m; scanf("%d", &n); for(int i=1; i
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaChCW%2FbtqS9ZIm5lw%2FFxk1Ph58vGriBhX21BhsGK%2Fimg.png)
날먹문제 솔직히 이게 왜 실4인지 잘 모르겠다. www.acmicpc.net/problem/5347 5347번: LCM 첫째 줄에 테스트 케이스의 개수 n이 주어진다. 다음 n개 줄에는 a와 b가 주어진다. a와 b사이에는 공백이 하나 이상 있다. 두 수는 백만보다 작거나 같은 자연수이다. www.acmicpc.net 유클리드 호제법 씌운 GCD를 이용하면 빠르게 구할수 있다. #include typedef long long int ll; ll gcd(ll a, ll b){ while(b!=0){ ll r = a%b; a = b; b = r; } return a; } ll lcm(ll a, ll b){ return a*b/gcd(a,b); } int main(){ int n; ll a, b; scanf(..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuI48M%2FbtqTjEC9HjS%2FDaaChmJzKIgoI9Bn3ovB31%2Fimg.png)
간단한 DP. 그런데 N범위가 작아서 브루트포스해도 될거같다. dp[k]를 k번째 수를 곱할때의 최대값 으로 정한다. 그러면 dp[k]를 만들 수 있는 방법은 기존까지의 수들을 싹 버리고 k번째 수만을 가지고 새로 시작하는 경우이거나, 기존까지의 수들 = dp[k-1] 에 k번째 수를 곱하는 경우 두가지로 나뉘게 된다. 이렇게 짜주면 쉽게 AC를 받을 수 있다. #include double arr[12345] = {0.0}; double dp[12345] = {0.0}; double max(double a, double b){return a>b?a:b;} int main(){ int n; double ans = -1; scanf("%d", &n); for(int i=0; i
![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