본문 바로가기

728x90

코딩테스트/BOJ

(49)
4673번 셀프 넘버 c++ 코드) #include using namespace std; bool num[10001]; int d(int n) { int temp; temp = n + n / 1000 + n % 1000 / 100 + n % 100 / 10 + n % 10; return temp; } void self_number() { int temp; num[1] = false; for (int i = 0; i < 10000; i++) { if (i < 10000) { temp = d(i); if (temp < 10000) num[temp] = true; } } } int main() { self_number(); for (int i = 1; i < 10000; i++) if (!num[i]) cout
2750번 수 정렬하기 나 오늘 종강했따!!! 이제 마지막 종강이야,,, 기분이 이상할 줄 알았는데 막상 하니까 역시 종강,,,명불허전,,,, 짱좋아 어제 밤을 샌 관계로 쉬운 구현 문제 하나 풀고 내일부터 다시 이코테 정독이다!! 위 문제는 정답률이 높은만큼 확실히 쉬웠다! 그냥 간단하게 벡터로 입력받고 algorithm 헤더의 sort함수로 정렬해서 출력해따! 이래서 c보다 c++이 좋아~ 아래는 c++ 코드! #include #include #include #include using namespace std; int main() { vector v; int n; cin>>n; for(int i=0;i>x; v.push_back(x); } sort(v.begin(),v.end()); for(int i=0;i
1157번 단어 공부 구현 유형~ 일단 냅다 코드~ #include #include #include using namespace std; int main() { string str; int arr[26]={0}; int max=0, max_index; int count=0; //최대 사용 문자가 한 개인지 cin>>str; //대문자 : 65-90, 소문자 : 97-122 for(int i=0;i
1152번 - 단어의 개수 풀이) 공백이 연속으로 나오지 않는다는 조건이 있으니까 그냥 '공백의 개수 + 1'이 단어의 개수가 될듯? 일단 이렇게 구현해보자 c++ 코드) #include #include #include using namespace std; int main() { string str; int count=0; getline(cin,str); for(int i=0;i
DP > 이친수 (2193번) 문제 풀이 아니 나는 자연스럽게 2차원배열방식으로 비슷하게 풀었는데 백준 강의 확인해보니까 이걸 또 일차원으로 변형해서 풀수도 있다네? 난 연습단계니까 당연히 그럼 그렇게 해봐야지 저것도 복습일텐데... 음 그럼 2차원배열 방식은 설명 따로 안씀 앞에랑 똑같으니까! 그냥 d[i][j]에서 j에 0 또는 1만 오고 d[i][1]일떄는 d[i-1][0]만 가능한거 조심하면 됨! (1은 연속 불가니까) 이번엔 일차원배열 방식! 이 방식은 아마 이게 이친수 특성때문에 가능한 것 같아 그리고 이것도 2차원배열이랑 아이디어는 똑같아, 맨 뒤의 숫자가 뭐가 오는지에 따라서 문제를 쪼개가는거야 만약 0이라면? 그 앞에는 0이나 1로 끝나고 길이가 1작은 이친수겠지 근데 1이면? 그 앞에는 무조건 0이 와야되잖아 즉 무..
DP > 오르막 수 (11057번) 문제 풀이 이것또한!! 2차원배열 기법(?)으로 구현했다ㅎㅎㅎ 아주 재밌고만 막판에 내가 이걸 오르막수라고 같은 수가 중복되면 안될줄 알고 구현했더니 수가 자꾸 모자란겨.. 아쒸 왜저래 했는데 알고보니까 이거더라구... 에혀 그치만 재밌당ㅎㅎㅎ 자 풀이 시작! 자 이차원배열 d[i][j]는 길이가 i이고, 맨 뒤가 j인 수의 갯수이다. 그리고 d[i][j]는 쪼개면 d[i-1][j-k] 이런식으로 오는데 j-k는 j보다 작거나 같아야 한다. 요기가 약간 헷갈렸는데 오르막수는 진짜 딱 수열이라서 n이 2면 00도 가능하다! 암튼 그래서 얘는 3중 반복문이 필요하고 결과 값은 j가 0부터 9까지 모두 더해주면 된다 (저기 필기에는 1로 되어있지만ㅋㅋㅋ) 이렇게 정리하니까 별로 안어려워 보이지만 엄청 고민 오..
DP > 쉬운 계단 수 (10844번) 문제 풀이 자자 중요한건 뭐다? 코테는 큰 수를 다루니까 왠만하면 자료형은 long long으로 쓰고!! 출력을 lld로 하고!!! 나머지 구하는 거면 저장할 때랑 출력할 때마다 나눠서 저장하고 출력해! 그리고 증감연산자 쓸거면 변수 선언하고 초기화 꼭꼭하고 임마!! 이것도 바로 전에 풀었던 문제랑 같은 맥락이야 계단 수니까 맨 뒤에 수가 어떤게 올지 고민하면 돼! 그럼 2차원 배열로 맨 뒤의 수가 뭐가 될지 정해주면 되는거지 이제 DP의 중요한 부분인 점화식을 고려해보자 2차원이니까 d[i][j]고, 이건 길이가 i이면서 맨 뒤 숫자가 j가 오는 계단수의 갯수를 저장하는 배열인거지 그럼 얘는 계단수니까 d[i-1][j-1]이랑 d[i-1][j+1]의 경우가 더해지는 경우겠지? 이 떄 중요한게 있어 바로..
DP > 1, 2, 3 더하기 5 (15990번) 문제 풀이 자료형 이씨... 다 구현했는데 d배열을 int로 선언해서 틀렸다.. long long으로 바꾸니까 되네... 이게 오버플로우 고려를 해줬어야 하는데 안해서 난거 같다. 일단 풀이과정 설명 먼저 하고 오류 난 이유도 적어야지 우선 여기서는 이전에 풀었던 "1, 2, 3 더하기" 문제와 다른 점이 있다. 바로 숫자가 연속되게 올 수는 없다는 것이다. 예를 들어 n이 4일 때 1+1+2는 안되지만 1+2+1은 되는 것이다. 이 문제도 1, 2, 3 더하기 문제와 동일하게 맨 마지막에 오는 숫자에 집중을 해준다. 그렇게 문제를 쪼갤거니까~ 근데 달라지는 것은 맨 마지막 숫자에 따라서 앞에 올 수 있는 숫자가 달라진다는 것이다. 맨 마지막 숫자가 1이면? 앞에는 2, 3만 가능하고, 2이면 1, 3만..

728x90