-
쿼드압축 후 개수 세기 (c++)코딩테스트/프로그래머스 2024. 2. 28. 22:41
1. 문제
코딩테스트 연습 - 쿼드압축 후 개수 세기 | Programmers School
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 풀이
문제에서 2차원 정수 배열을 쿼드 트리와 같은 방식으로 압축하기를 주제로 줬다.
전체가 동일한지 확인하고, 맞으면 압축 아니면 더 작은 부분끼리 확인하고 하는 방식이라서 재귀함수를 사용해야할 것 같다고 생각했다. 조건을 주고 더 이상 비교할 수 없을 때까지 재귀함수를 돌렸는데, 찾아보니까 이렇게 푸는 방법이 바로 'dfs'였다. 그냥 풀었는데 dfs로 풀고있었다.
[알고리즘] 깊이 우선 탐색(DFS)이란 - Heee's Development Blog (gmlwjd9405.github.io)
[알고리즘] 깊이 우선 탐색(DFS)이란 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
1. x, y, size를 주고 arr[x][y]를 기준으로 size만큼 반복문 돌리면서 0과 1 확인
- 처음에는 arr[x][y] == arr[x][y+1]으로 비교했는데, 2차원 배열이라서 가로값이랑만 비교하는게 아니라 세로값이랑도 비교해야해서 계속 오류가 났다.
- 후에 0이랑 1이랑 있는지 없는지 확인하는 int one, zero를 따로 만들어서 (one && two)로 전부 동일한지 확인
2. 전부 동일하면 answer의 맞는 인덱스에 +1 & 쿼드 압축하기
- 최종 압축된 배열에서 압축되지 않은 1과 0은 그냥 따로 셀 예정이어서, 전부 동일하게 되서 압축된 부분은 그냥 버리는 값으로 만들기 위해 다른 값 삽입
- 실행했을 때 보기 편하려고 1이 압축된 곳은 3으로, 0이 압축된 곳은 2로 통일
3. 동일하지 않아 압축이 되지 않은 경우 dfs로 다시 탐색
3. 생각
- dfs에 대한 이론 공부를 해볼 필요가 있다고 느꼈다.
shin0112/programmers_cpp: programmers' coding test solutions (github.com)
출처 : 프로그래머스 코딩 테스트 연습 - 쿼드압축 후 개수 세기
https://school.programmers.co.kr/learn/courses/30/lessons/68936#'코딩테스트 > 프로그래머스' 카테고리의 다른 글
정수 삼각형 (c++) (0) 2024.02.28 덧칠하기 (c++) (0) 2024.02.21 최빈값 구하기 (c++) (0) 2024.02.08 문자열 나누기 (c++) (0) 2024.01.31 최댓값 만들기 (2) (c++) (0) 2024.01.28