728x90
반응형

코딩테스트 250

프로그래머스, 숫자의 표현 : C++ [CPP]

음.. 그냥 생각나는대로 했지만 n^2의 알고리즘은 너무 혐오스럽길래... 과연 이렇게 짜도 되나생각했다. https://programmers.co.kr/learn/courses/30/lessons/12924 #맞는 풀이 #include #include using namespace std; int solution(int n) { int answer = 0; //1부터 시작O(n) for(int i = 1; i 하지만 j가 n/2에 가까울수록 이 루프가 실행되는 빈도가 줄어듬 while(1){ for(int j = i+1; j= n){ break; } } //종료후 같은지 넘친지 조사 if(res == n) answer++; else break; } } //n은 무조건 n하나로 된다. answer++; r..

프로그래머스, [3차] n진수 게임 : C++ [CPP]

이것도 어렵다기보다.... 귀찮은 방법?? 우선 다른 사람이 더 잘풀었을 것 같다. 나는 생각대로 코딩했다. https://programmers.co.kr/learn/courses/30/lessons/17687 #내 맞는 풀이 #include #include #include using namespace std; //n을 x진법한 문자열 반환 -> 정방향으로 출력 string func(int n, int x){ string s = ""; int div = n; //새로 추가되는 것들이 앞에옴 while(1){ if(div >= x){ int res = div%x; if(res == 10){ s = 'A' + s; }else if(res == 11){ s = 'B' + s; }else if(res == 12..

프로그래머스, 땅따먹기 : C++ [CPP]

DP문제인 것은 알았지만 바로 생각해내기에 어려운 문제.. 우선 나는 그랬다. https://programmers.co.kr/learn/courses/30/lessons/12913 이전 열에서의 최댓값을 채택하는 것이 현재열에서도 최댓값을 보장하는가? 이것에 대해 말할 수 있다면 풀 수 있다. **다만 C++의 max는 2개의 비교만 되어서.. 하나씩 해줬다. max_element는 iterator가 필요해서 그냥 나는 이걸로 했다. # 맞는 풀이 #include #include #include using namespace std; int solution(vector land) { int answer = 0; //x열을 골랐을 때의 최댓값 = 이전 열에서 x를 제외하고 최댓값 + 현재 x열의 값. // ..

프로그래머스, 피보나치 수 : C++ [CPP]

DP의 개념이 있고 Memoization의 개념이 있어야 한다. https://programmers.co.kr/learn/courses/30/lessons/12945?language=cpp #배운 점 Memoization과 하위 문제로 나눌 수 있는지 DP 풀이 계산된 결과를 저장하고 바로 불러올 수 있는가? # 맞는 풀이 #include #include using namespace std; /* //재귀로 구현한 피보나치 (memoization x) int func(int n){ if(n == 0)return 0; if(n == 1) return 1; return (func(n-1) + func(n-2)) % 1234567; } */ //for memoization int arr[100001] = {0..

프로그래머스, N개의 최소공배수 : C++ [CPP]

이것도 그냥 수학이다. 유클리드 호제법을 이용하면 된다. 간략하게 말해서 G(A,B) = G(B, A%B)와 같다. https://programmers.co.kr/learn/courses/30/lessons/12953 #맞은 풀이 #include #include #include using namespace std; //최소 공배수를 구하기 위해 최대공약수를 알아보자 //유클리드 호제법 사용 int max(int a, int b){ //a가 b보다 크다는 가정 if(a n개의 원소면 n번 연산 while(size){ def = min(def,arr[size-1]); //현재까지 계산된 최소 공배수와 다음 원소와의 최소공배수 size--; } // 끝나면 def가 모든 수에 대한 최소공배수임. answer ..

프로그래머스, 예산 : C++ [CPP]

Greed 하게 풀었는데 Greed를 시도해보니 맞았다. 보다는 Greed를 쓴 이유를 알면 좋다. https://programmers.co.kr/learn/courses/30/lessons/12982?language=cpp #맞은 풀이 #include #include #include #include #include using namespace std; int solution(vector d, int budget) { int answer = 0; sort(d.begin(), d.end()); // 오름차순 정렬. //Greed 방법 적용 -> 가장 적은 부서부터 적용 for(int x : d){ if(x

프로그래머스, 3진법 뒤집기 : C++ [CPP]

우리가 쉽게 하는 n진법 변환을 컴퓨터로 어떻게 표현할까? 생각하면 된다. 역순인 이유도 있었다. https://programmers.co.kr/learn/courses/30/lessons/68935?language=cpp 배운 점 스택으로도 넣어서 꺼내쓸 수 있지만 나는 string으로 연습해봤다. #맞는 풀이 #include #include #include #include using namespace std; //n은 1억 이하인 자연수 //3진수 만드는법 3으로 나누면서 몫과 나머지 조사. int solution(int n) { int answer = 0; int div = 0; //몫 int res = 0; //나머지 string s = ""; div = n; // 초기값. while(div>=3..

프로그래머스, 폰켓몬 : C++ [CPP]

쉽게 풀 수 있지만 문제 해석을 잘해야 한다. https://programmers.co.kr/learn/courses/30/lessons/1845?language=cpp 배운 점 Set은 Unique함 (정렬할 수도 안할 수도 있음) Set의 원소 추가는 Insert로 함 #맞는 풀이 #include #include using namespace std; int solution(vector nums) { int answer = 0; set s; // unique한 값을 넣음 int size = nums.size(); //set으로 바꾸어서 unique한 값을 만든 뒤 //각 종류마다 한마리씩 가져가는 것이 가장 다수의 종류를 가져갈 수 있음 for(auto x : nums){ s.insert(x); } /..

728x90
반응형