본문 바로가기

반응형

알고리즘/BOJ

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.. 더보기
2445번 별찍기 - 8 별찍기 아래 단계부터 풀어오면서변수를 요리조리 조합해서 별의 갯수를 찍어도 보고 고민하다가다른 사람들 중 for문을 그냥 여러개 해서 간단하게 찍는 갯수만으로 하는 방식을 보고그 방식이 나한테 더 맞는 것 같아서 그 방식으로 풀었다.구글 검색을 하면 변수를 요리조리 한것도 있지만, 변수를 어떻게 할 것인가는 나에겐 좀 복잡해서... 간단하게 설명을 하면첫번째 줄에서 n번째 줄까지 첫번재 큰 for문을 통해 구했다.그리고 두번째 큰 포문에서 나머지 n-1 개의 줄을 구했다. for 문 안에서는 별 찍고 -> 공백 찍고 -> 별찍고 -> 공백찍고 이런식으로 돌아가는 4개의 for문으로 구성하였다. 코드1234567891011121314151617181920212223242526272829303.. 더보기
10818번 처음 문제를 보았을 때, 동적할당이 필요하니까 vector를 써야겠다고 생각하고, 일일이 v에 값을 집어넣은 후 최대값과 최소값을 비교해서 찾아냈다. 그리고 다시 두번째는 대소 비교하는 방식을 이용하는 코드로 짰다.나는 저 대소비교 방식을 잘 사용하지 않는데, 많은 사람들이 자주 이용하는 것 같아서 사용법을익히기 위해 한번 짜보았다. 그러면서 코드를 다시 보다가, 그냥 vector를 만들 필요없이 입력 즉시 대소 비교가 가능하다는 점을 발견했다.불필요한 코드를 줄일 수 있었다. 나는 대소 비교 보다는 max,min 함수를 자주 이용하곤 한다. 하지만 저 방식도 습득해야 겠다. 처음 코드 123456789101112131415161718192021222324252627282930313233343536373.. 더보기
1924번 난이도는 그렇게 높지 않은 문제였다.다만 예전에는 배열에 저런식으로 값을 넣지 않고 if문을 여러개 써서 풀던 나였다면 이젠 조금 바뀌었다. 하지만 문제 풀때, 1월부터 12월까지 날짜를 제대로 안읽고 7,8월이 31이라는 점을 잊고 맘대로 풀다가 실수했다.문제를 잘 읽는 습관, 정확하지 않은 배경지식을 사용하려 한 습관을 버려야 겠다. 코드 1234567891011121314151617181920212223242526272829#include#includeusing namespace std;int month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };string day[7] = { "SUN","MON","TUE","WED","THU","FRI","SAT" };.. 더보기
11718번 문자열 입력에 대해서 막상 문제를 풀려고 하니 어떻게 풀어야 할지 막막했다.그냥 BOJ 나 Codeground 문제들만 풀다보니 숫자나 char 형에 대해서만조금 풀어보고 이렇게 긴 문자열을 다루는 방법에 대해서는 잘 알지 못하여서 구글링을 하며 문제를 풀었다. cin을 사용할 때의 문제점 1. 버퍼 오버플로우 변수의 배열의 크기를 넘어가는 문자열을 입력받게 되면, 문제가 발생하는 것 2. cin은 공백 처리를 제대로 하지 못한다. 아래 코드에서 입력으로 123 321 을 입력한다면 출력으로는 123 밖에 출력되지 않는다. 1234567891011#includeusing namespace std; int main(){ int a; cin >> a; cout 더보기
10952번 기초부터 내가 아주 잘못되어 있으면서다른 문제를 풀려고 했었다는걸 가장 간단한 입출력 문제를 풀면서 느낀다. 누군가는 그냥 똑같고 쉬운 코드 같은데 왜 올리겠냐고 하지만다시 풀었을 때, 스스로 조금씩 변화하고 있는, 작은 코드라도 조금씩 나아지는 모습을 남기기 위해. 저런식으로 while 조건문에 입력하는 것은 물론 여러가지 조건식을 쓸 수 있다는 사실... 캐치! 예전에 BOJ 처음 들었을 때 풀었던 코드123456789101112131415#includeusing namespace std; int main(){ int A, B; while (cin >> A >> B) { if (A == 0 && B == 0) break; cout b && a!=0 && b!=0) { cout 더보기

반응형