본문 바로가기

반응형

전체 글

9095번 9095 - 1 , 2 , 3 더하기 문제의 조건이 굉장히 작아서 완전탐색으로 풀 수 있다고 생각했다. 하지만 값이 커질 경우에는 메모이제이션을 이용해야 할 것 같다.그래서 완전탐색, DP, 그리고 추가로 내가 PS를 처음시작했을 때 코드ㅋㅋㅋㅋ 이렇게도 풀었구나 싶은 코드 1. 완전탐색재귀 함수를 통해서 더해주면서 n값과 일치할 때까지 실행되도록 코드를 작성하였다. 1234567891011121314151617181920212223242526272829303132333435363738394041#include using namespace std;int ans;int n;void go(int num){ if (num > n) { return; } if (num == n) { ans += 1; return.. 더보기
11727번 11727 - 2xN 타일링 2 D[N] = 2xN 타일을 덮는 방법의 갯수라고 점화식을 세워서 풀었다. 풀면서 발견한 나의 문제점 => 기저 사례에 대해서 제대로 확인을 안한다는 점. - 기저 사례를 확인 할 때는 N-2,N-1 이기 때문에 1,2 를 넣어야 한다는 점. 그리고 기저 사례는 직접 계산을 해야 한다는 점. ##################풀면서 이상했던 점###################### 정답을 출력할 때, 나는 D[N]이 전역변수라 그냥 출력하면 될 줄 알았는데저런식으로 코딩할 경우 100프로에서 실패라고 떴다.그냥 go()함수를 출력할 경우에만 정답이라고 나왔다.???????????????????????????????????????????????????왜 그런지 이유를 파악해야.. 더보기
11726번 11726 - 2xn 타일링 처음에 완전 탐색으로 문제를 풀었다가 시간초과가 났다.그래서 DP로 접근해서 문제를 풀었다. D[N]= N칸을 채우는 경우의 수 라고 점화식을 세우고 문제를 풀었다. 123456789101112131415161718192021222324252627282930313233343536373839404142#include#includeusing namespace std; int D[1001];int n;int go(int N){ if (N > n; memset(D, -1, sizeof(D)); go(n); cout 더보기
1463번 1463 - 1로 만들기 1. 완전 탐색을 이용해서 풀기 재귀 함수를 이용해서 모든 케이스를 다 돌려보았다.재귀를 돌리는 중에 지금 현재의 최소값보다 큰 값이 나오면 return 해주는 방식으로 속도를 조금 빠르게 했다. 123456789101112131415161718192021222324252627282930313233343536373839404142#includeusing namespace std;int ans = 987654321;void go(int n, int cnt){ if (cnt > ans) { return; } if (n == 1) { ans = cnt > ans ? ans : cnt; return; } if (n % 3 == 0) { go(n / 3,cnt+1); } if (n % 2.. 더보기
외발 뛰기 (문제 ID: JUMPGAME, 난이도: 하) ★★★★★다시 풀어 볼 문제★★★★★ 알고리즘 문제해결 전략 1권외발 뛰기 (문제 ID: JUMPGAME, 난이도: 하) 나름 DP문제는 많이 풀어봤다고 생각했지만 , 이 문제처럼 TRUE FALSE로 답을 내는 문제는 처음이었다.내가 푼 DP문제들은 경우의 수를 구하는 문제가 대부분이었다.그러다 보니 약간 생소한 느낌이고, 다른 문제를 푸는 느낌이었다.그래서 풀어보는데 이해가 안가고 고민해야 했던 부분이 많았다. # 내가 지금까지 풀어온 DP는 뭔가 점화식을 정하고 풀어야 한다는 강박관념이 있었는데,이 문제는 그냥 재귀함수로 원하는 칸에 도달할 때까지 풀면서, 메모이제이션만 하면 됐다.물론 이 과정에서 점화식을 구하고 풀어도 되겠지만 딱히 점화식이라고 생각하지 않았다(개인적으로) 코드적 스킬은 마지막 .. 더보기
2017-11-12 2017-11-12BOJ 입출력 문제 완료 255710002558109501095110952109531102111022117181171911720117212741274227391924839310818243824392440244124422445252224461099110992 더보기
2445번 별찍기 - 8 별찍기 아래 단계부터 풀어오면서변수를 요리조리 조합해서 별의 갯수를 찍어도 보고 고민하다가다른 사람들 중 for문을 그냥 여러개 해서 간단하게 찍는 갯수만으로 하는 방식을 보고그 방식이 나한테 더 맞는 것 같아서 그 방식으로 풀었다.구글 검색을 하면 변수를 요리조리 한것도 있지만, 변수를 어떻게 할 것인가는 나에겐 좀 복잡해서... 간단하게 설명을 하면첫번째 줄에서 n번째 줄까지 첫번재 큰 for문을 통해 구했다.그리고 두번째 큰 포문에서 나머지 n-1 개의 줄을 구했다. for 문 안에서는 별 찍고 -> 공백 찍고 -> 별찍고 -> 공백찍고 이런식으로 돌아가는 4개의 for문으로 구성하였다. 코드1234567891011121314151617181920212223242526272829303.. 더보기
10818번 처음 문제를 보았을 때, 동적할당이 필요하니까 vector를 써야겠다고 생각하고, 일일이 v에 값을 집어넣은 후 최대값과 최소값을 비교해서 찾아냈다. 그리고 다시 두번째는 대소 비교하는 방식을 이용하는 코드로 짰다.나는 저 대소비교 방식을 잘 사용하지 않는데, 많은 사람들이 자주 이용하는 것 같아서 사용법을익히기 위해 한번 짜보았다. 그러면서 코드를 다시 보다가, 그냥 vector를 만들 필요없이 입력 즉시 대소 비교가 가능하다는 점을 발견했다.불필요한 코드를 줄일 수 있었다. 나는 대소 비교 보다는 max,min 함수를 자주 이용하곤 한다. 하지만 저 방식도 습득해야 겠다. 처음 코드 123456789101112131415161718192021222324252627282930313233343536373.. 더보기

반응형