그리디 4

프로그래머스/큰 수 만들기(Greedy)/C++

다양한 방법으로 풀 수 있는데, 나는 큐를 사용해서 풀었다. 주의할 점 : 같은 숫자들이 있는 경우에도 반드시 k개의 수를 제거하여 가장 큰 수를 만들어야 한다는 점. 작은 수를 골라서 제거하는 방식으로는 틀리기 쉽다. #include #include #include #include using namespace std; /* 처음에 사용한 직접 정의한 최대값 인덱스 찾기 함수 int find_max_index(string &n, int start, int end){ int max = -1; int max_index = 0; for(int i = start; i 0){ index = max_element(number.begin()+start+1,number.begin()+start+2+k) - number..

백준/1969번(Greedy)/C++

주의할 점 : DNA s1,s2....sn 중 Hamming Distance의 합이 가장 작은 DNA si를 찾는 것이 아니라, 가장 작은 DNA s를 구하는 것이다. 처음에 문제를 잘못 이해해서 잘못 풀었다. #include #include #include using namespace std; int n, m; string s[1001]; char result[1001]; int ncount[4]; int main(void) { cin >> n >> m; for (int i = 0; i > s[i]; } int hammingD = 0; for (int i = 0; i < m; i++) { fill(ncount, ncount + 4, 0); for (int j = 0; j ..

백준/1541번(Greedy)/C++

마이너스가 한 개라도 나온 이후에는 무조건 빼줘야 한다는 점을 파악하면 쉽게 풀 수 있다. 디버깅 기록 : 필요했던 것 1. 문자열에 포함되어 있는 상수를 어떻게 변형시킬 것인지. stoi함수를 이용하는 방법도 있고, char에서 '0'을 뺀 후 일일이 10배씩 해주는 방법도 있다. 2. 마지막 처리. for문에서 마지막 시행을 제외시키는 방법도 있고, '\0'문자를 이용해 for문 안에서 따로 처리하는 방법도 있다. 3. boolean 변수 사용. boolean 변수같은 경우는 해당 변수가 true일 때 어떤 상태를 의미하는지까지 잘 전달해야 한다. 다음에는 더욱 유의할 것.

백준/1138번(Greedy)/C++

그리디 문제는 대부분 문제를 있는 그대로 받아들이기보다는, 문제에서 요구하는 바를 제대로 한 번에 구할 수 있는 방법을 간파해야 해서 까다롭다. 그게 한 번에 보이면 바로 풀리는데, 그렇지 않으면 이 문제처럼 계속 틀리게 된다. 디버깅 기록 : 작은 수부터 위치를 찾는다면, 아직 비어있는 위치는 자신보다 큰 수가 올 예정이라는 것을 알 수 있다. 따라서 맨 앞부터 훑으면서 아직 원소가 들어가 있지 않은 자리의 개수를 세어서 입력받은 수와 일치된 후에 원소를 삽입하면 된다. 작은 수부터 위치를 찾아야 한다는 점, 입력 위치를 찾는 수의 입장에서 아직 비어있는 자리는 내가 들어가지 않는 이상 나보다 큰 수가 위치할 자리라는 점을 파악해야 풀 수 있다.