[프로그래머스] 쿼드압축 후 개수 세기 (코딩테스트 연습 | 월간 코드 챌린지 시즌 1)

2024. 9. 10. 18:37·알고리즘/프로그래머스

문제

https://school.programmers.co.kr/learn/courses/30/lessons/68936

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


아이디어

✅ 사각형을 4개로 나눈다

  • ✅ 재귀함수를 이용해 구현
  • 사각형의 가로, 세로가 1이 될때까지 또는 사각형 내 숫자가 모두 같을 때까지 반복수행

코드

def divide_square(arr):
    length = len(arr[0])
    arr_1 = [[0] * (length//2) for _ in range(length//2)]
    arr_2 = [[0] * (length//2) for _ in range(length//2)]
    arr_3 = [[0] * (length//2) for _ in range(length//2)]
    arr_4 = [[0] * (length//2) for _ in range(length//2)]
    
        
    for r in range(length):
        for c in range(length):
            if r < length//2 and c < length//2:
                arr_1[r][c] = arr[r][c]
                
            elif r < length/2 and c >= length/2:
                arr_2[r][c-length//2] = arr[r][c]
                
            elif r >= length/2 and c < length/2:
                arr_3[r-length//2][c] = arr[r][c]
                
            elif r >= length/2 and c >= length/2:
                arr_4[r-length//2][c-length//2] = arr[r][c]
                
    return arr_1, arr_2, arr_3, arr_4
    
num_0 = 0
num_1 = 0

def check(arr):
    global num_0
    global num_1
    
    length = len(arr[0])
    temp = arr[0][0]
    
    if length == 1:
        if temp == 0:
            num_0 += 1
        elif temp == 1:
            num_1 += 1
        return
    
    # 수가 전부 같다면 0
    flag = 0
    
    # 수가 전부 같은지 확인
    for r in range(length):
        for c in range(length):
            if temp != arr[r][c]:
                flag = 1
                break
    
        if flag == 1: # 수가 다름
            break
    
    # 수가 다른 경우
    if flag == 1:
        divide_arrs = divide_square(arr)
        for divide_arr in divide_arrs:
            check(divide_arr)
    
    # 수가 전부 같은 경우    
    else:    
        if temp == 0:
            num_0 += 1
        elif temp == 1:
            num_1 += 1
                    

def solution(arr):
    global num_0
    global num_1
    
    answer = []

    check(arr)
    
    answer = [num_0, num_1]
    return answer

 

 

 


풀이 후

 

✅ all 함수

  • 파이썬 내장 함수, 모든 요소가 참일 때만 True 반환
  • 수가 전부 같은지 확인하는 코드 단축 가능
first_element = arr[0][0]
    
all_same = all(arr[r][c] == first_element for r in range(length) for c in range(length))

# all_same은 True 혹은 False
# all_same 값에 따라 flag 없이 분기 가능 (divide_square 혹은 중단)

 

 

 

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 가장 큰 수 (코딩테스트 연습 | 정렬)  (0) 2024.09.29
[프로그래머스] 최소직사각형 (코딩테스트 연습 | 완전탐색)  (0) 2024.09.22
[프로그래머스] 기능개발 (코딩테스트 연습 | 스택/큐)  (1) 2024.09.10
[프로그래머스] 카펫 (코딩테스트 연습 | 완전탐색)  (1) 2024.09.09
'알고리즘/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 가장 큰 수 (코딩테스트 연습 | 정렬)
  • [프로그래머스] 최소직사각형 (코딩테스트 연습 | 완전탐색)
  • [프로그래머스] 기능개발 (코딩테스트 연습 | 스택/큐)
  • [프로그래머스] 카펫 (코딩테스트 연습 | 완전탐색)
KyuminKim
KyuminKim
컴퓨터공학과 학생의 이모저모 개발 일지 📝
  • KyuminKim
    이모저모
    KyuminKim
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 프로젝트 (2)
        • first-blog (2)
      • 클라우드 (22)
        • 도커 (14)
        • 쿠버네티스 (5)
        • AWS (2)
      • 알고리즘 (5)
        • 코드트리 (0)
        • 프로그래머스 (5)
      • 백엔드 (8)
      • 프론트엔드 (2)
      • 보안 (3)
        • 드림핵 (2)
      • python (3)
      • 네트워크 (1)
      • 기타 (6)
        • 2025 프로펙트 부트캠프(1차) | 클라우드 엔.. (0)
        • OSSCA | 2024 오픈소스 컨트리뷰션 아카데.. (0)
        • WIK (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    진단평가
    도커파일
    MySQL
    주간레포트
    DB
    character_set_server
    자료구조
    인코딩
    코드트리
    cannot send an empty message
    DP
    코딩트리조별과제
    티스토리챌린지
    오블완
    amazonlinux
    urf8
    쿠버네티스
    docker
    고랭
    EC2
    2024 당근 테크 밋업
    도커
    코딩테스트
    characterencoding
    파이썬
    recover_your_data
    apiserver-runtime
    탈퇴구현
    코드트리조별과제
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
KyuminKim
[프로그래머스] 쿼드압축 후 개수 세기 (코딩테스트 연습 | 월간 코드 챌린지 시즌 1)
상단으로

티스토리툴바