개발/알고리즘

알고리즘 문제 풀이를 기록하는 페이지입니다.
문제 접근 & 오류 처음에는 이어지는 문자가 앞이랑 같으면 체스판이 안 되니 고치는 방식으로 구현했다. 이때 board 에 직접 고쳐넣었는데 첫번째 예제 case 인 한 문자만 고치면 되는 경우에서는 잘 됐는데, 판단의 근거가 될 board 가 고쳐지니 두번째 예제 case 에서는 완전히 꼬였다. 그래서 2차원 배열을 하나 더 만들어서 체스판 하나 확인할 때마다 복사하는 것도 생각했는데 최악의 경우 43*43번 복사해야 돼서 메모리 낭비가 말도 안돼보였다. 이때 문득 bool type, 이전 요소가 잘못되어 (바뀌지는 않았지만) 바뀌었다고 판단할건지 정하는 isChange 를 만들면 효과적일 것 같아서 구현해봤는데 예상 그대로 잘 되었다. 예제 case 에서 잘 돌아가서 그대로 제출했는데 '틀렸습니다'가..
문제 접근 처음에는 Z 형태로 탐색하다가 해당 좌표가 (r,c) 면 cnt 반환하는 방식으로 풀었고, 시간초과가 나자 4분면으로 나눠 필요한 부분만 탐색하도록 했다. 오류 (r,c) 를 찾았는데 계속 탐색을 이어가며 cnt가 증가됐다. 처음에는 return; 해도 안 끝나나 싶어서 24행에 cout
문제 접근 큐를 2개 만들어서 같이 push 한 다음에 하나는 내림차순으로 정렬되게 해서 front() 가 같은 경우 print 하여 cnt(인쇄 횟수)를 1씩 증가시키도록 했다. 처음에는 헤더의 sort 로 해보려고 했는데 안 돼서 찾아보니 priority_queue() 라는 push 하면 알아서 내림차순 정렬해주는 queue 가 있길래 이걸 사용했다. print 되거나 relocation 될 때 궁금한 문서 위치가 1씩 감소돼서 M 을 1씩 감소되도록 했다. front와 top이 같을 때 M이 0이면 그때의 cnt 가 답이다. 오류 문제 접근은 제대로 됐다고 생각했는데 답이 안 나온다. 확인해보려고 각 절차별로 cout 으로 확인해보니 clear_queue 가 call-by-value 로 가져와서 안..
문제 설명 이 문제는 듣도 못한 사람과 보도 못한 사람의 명단에 모두 속해있는 사람의 명단을 구하는 문제이다. 접근 방법 처음에는 곧이곧대로 명단 2개 만들어서 중복되는 사람 찾고 result vector 에 넣었는데 그럴 필요 없었다. 하나의 vector 에 두 명단을 다 집어 넣고 중복되는 사람을 찾으면 된다. 중복된 사람은 정렬했을 때 이름이 반복되는 사람을 찾는 방법으로 찾았다. #include #include #include #include using namespace std; int main(void) { int N,M,cnt=0; string temp; vector name; vector result; cin>>N>>M; for(int i=0; i>temp; name.push_back(tem..
상단으로