728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
2. 풀이과정
해당 문제는 배열을 압축 가능할 때까지 나누고 압축이 가능하다면 압축한 후 최종 압축한 결과에서 0과 1의 개수를 구하는 문제이다.
배열 안의 모든 원소의 값이 동일해야 해당 배열(구간)을 압축할 수 있다.
만약 압축이 불가능하다면 4개의 균일한 정사각형 영역으로 나눈 뒤, 각 영역별로 압축을 진행한다.
- 배열을 입력받아 압축한 결과를 반환하는 함수를 생성한다. def check(array)
- 입력받은 배열의 전체 원소의 개수를 저장한다. size = sum(list(len(i) for i in array))
- 만약 전체 원소가 0이면 if (sum(list(i.count(0) for i in array)) == size)
- 압축한 결과가 0이므로 최종 0의 개수를 증가시킨다. answer[0] += 1
- 만약 전체 원소가 1이면 elif (sum(list(i.count(1) for i in array)) == size)
- 압축한 결과가 1이므로 최종 1의 개수를 증가시킨다. answer[1] += 1
- 만약 압축이 불가능하다면 else
- 해당 배열을 4개의 구간으로 나누어 다시 압축한다.
- 행 0 ~ n//2, 열 0 ~ n//2 구역 arr1 = list(array[i][ : len(array) // 2] for i in range(len(array) // 2))
- 행 0 ~ n//2, 열 n//2 ~ n 구역 arr2 = list(array[i][len(array) // 2: ] for i in range(len(array) // 2))
- 행 n//2 ~ n, 열 0 ~ n//2 구역 arr3 = list(array[i][ : len(array) // 2] for i in range(len(array) // 2, len(array)))
- 행 n//2 ~ n, 열 n//2 ~ n 구역 arr4 = list(array[i][len(array) // 2: ] for i in range(len(array) // 2, len(array)))
- 균일하게 나눈 4개의 구역을 각각 압축한다. check(arr1) check(arr2) check(arr3) check(arr4)
- 원래 초기 배열을 압축하고 난 최종 결과에서의 0과 1의 개수를 구한다. check(arr)
반응형
3. 소스코드
def solution(arr):
answer = [0, 0]
def check(array):
size = sum(list(len(i) for i in array))
if (sum(list(i.count(0) for i in array)) == size):
answer[0] += 1
elif (sum(list(i.count(1) for i in array)) == size):
answer[1] += 1
else:
arr1 = list(array[i][ : len(array) // 2] for i in range(len(array) // 2))
arr2 = list(array[i][len(array) // 2: ] for i in range(len(array) // 2))
arr3 = list(array[i][ : len(array) // 2] for i in range(len(array) // 2, len(array)))
arr4 = list(array[i][len(array) // 2: ] for i in range(len(array) // 2, len(array)))
check(arr1)
check(arr2)
check(arr3)
check(arr4)
check(arr)
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 두 큐 합 같게 만들기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.26 |
---|---|
[프로그래머스] 큰 수 만들기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.24 |
[프로그래머스] 삼각 달팽이 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.22 |
[프로그래머스] 베스트앨범 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.20 |
[프로그래머스] 전력망을 둘로 나누기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.15 |
[프로그래머스] 기지국 설치 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.13 |
[프로그래머스] 소수 찾기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.11 |
[프로그래머스] 다리를 지나는 트럭 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.09 |