[프로그래머스] [1차] 프렌즈4블록 - 파이썬

2022. 3. 4. 12:32·코딩/프로그래머스 lv2

https://programmers.co.kr/learn/courses/30/lessons/17679?language=python3 

 

코딩테스트 연습 - [1차] 프렌즈4블록

프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙

programmers.co.kr

def check_square(board):
    zero = []
    for i in range(len(board) - 1):
        for j in range(len(board[i]) - 1):
            if board[i][j] != "o" and board[i][j] == board[i + 1][j + 1] == board[i + 1][j] == board[i][j + 1]:
                zero.append([i, j])
                zero.append([i + 1, j + 1])
                zero.append([i + 1, j])
                zero.append([i, j + 1])
    return zero

def move_block(board, zero):
    # 역순으로 아래부터 확인한다. 이유는? 위에서 부터 확인하면 공중 부양하는 블록이 나올수 있다.
    # 아래에 있는 블록부터 비어있는 곳은 내려야하므로
    for i in range(len(zero) - 1, -1, -1):
        # 제거된 블록의 바로위의 확인해보기 위한 값이다.
        check_n = zero[i][0] - 1
        # 비어있는 곳에 블록을 놓아야할 위치다
        put_n = zero[i][0]
        # 이제 반복문을 돌면서 확인한다.
        while check_n >= 0:
            # 만약에 블록이 있고 놓아야할 블록의 위치가 비어있다면? if 문 실행
            if board[check_n][zero[i][1]] != "o" and board[put_n][zero[i][1]] == "o":
                # 위치를 채워주는 곳이다.
                board[put_n][zero[i][1]] = board[check_n][zero[i][1]]
                # 이동 시킨 곳은 빈곳이 되므로 표시
                board[check_n][zero[i][1]] = "o"
                # 놓아야 할 곳이 채워지므로 값을 -1해주고 위에 부터 확인해준다.
                put_n -= 1
            # 그리고 체크해야 할 곳이 아래에서부터 위로 하나 줄었으니 -1
            check_n -= 1

    return board


def solution(m, n, board):
    answer = 0
    for i in range(len(board)):
        board[i] = list(board[i])

    while True:
        count = 2
        zero = check_square(board)
        for i in range(len(zero)):
            board[zero[i][0]][zero[i][1]] = "o"
            count += 1
        board = move_block(board, zero)
        if len(zero) == 0:
            break

    for i in range(len(board)):
        answer += board[i].count("o")

    return answer

이 문제는 테스트 5만 엄청 해결이 안되서 너무 힘들었던 문제이다. 

후...

여기서 확인 해보면 좋은 곳이 move_block 이다,

이 부분이 문제 였는 데 꼭 조건들을 확인해보며 체크하면 좋을거 같다. 

반응형

'코딩 > 프로그래머스 lv2' 카테고리의 다른 글

[프로그래머스] 주차 요금 계산 - 파이썬  (0) 2022.03.21
[프로그래머스] [3차] 방금그곡 - 파이썬  (0) 2022.03.08
[프로그래머스] 더 맵게 - 파이썬  (0) 2022.02.28
[프로그래머스] 뉴스 클러스터링- 파이썬  (0) 2022.02.21
[프로그래머스] 순위 검색 - 파이썬  (0) 2022.02.06
'코딩/프로그래머스 lv2' 카테고리의 다른 글
  • [프로그래머스] 주차 요금 계산 - 파이썬
  • [프로그래머스] [3차] 방금그곡 - 파이썬
  • [프로그래머스] 더 맵게 - 파이썬
  • [프로그래머스] 뉴스 클러스터링- 파이썬
코딩 코딩 코오딩
코딩 코딩 코오딩
  • 코딩 코딩 코오딩
    코딩하는 누누
    코딩 코딩 코오딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (491)
      • 생산성 (2)
        • 인텔리제이 (2)
      • 프로젝트 기록 (14)
        • git (2)
        • spring (3)
        • TestCode (2)
        • spring security (3)
        • 기타 (2)
        • MySQL (0)
        • Cloud (2)
      • 회고 (4)
      • Spring (6)
      • JPA (0)
      • DB (4)
        • MySql (2)
        • Redis (1)
      • Java (7)
        • JSP (1)
      • 잡담 (1)
      • CS (30)
        • 컴퓨팅 사고 (0)
        • 배열 (4)
        • 알고리즘 (8)
        • 메모리 (7)
        • 자료구조 (9)
        • 암호학 (2)
      • opencv (14)
      • AI (56)
        • 머신러닝 (2)
        • 딥러닝 (7)
        • tensorflow (3)
        • 머신러닝(딥러닝) 정리 (21)
        • 강화학습 (7)
        • 논문 읽기 (1)
        • 잡동사니 (1)
        • python AI (13)
        • 선형대수 (1)
        • 확률론 (0)
      • 알고리즘 공부 (177)
        • 그래프 이론 (0)
        • 다익스트라 (4)
        • 위상정렬 (3)
        • 신장트리-크루스칼 알고리즘 (4)
        • 플로이드 워셜 (3)
        • 이진탐색 (9)
        • 백트래킹 (11)
        • 부르드포스 (9)
        • 다이나믹 프로그래밍 (20)
        • BFS & DFS (24)
        • 그리디 (6)
        • 구현 (15)
        • 정렬 (3)
        • 기타 (62)
        • 수학? (1)
      • 코딩 (173)
        • 파이썬(python) (15)
        • c언어 (13)
        • 프로그래머스 lv1 (46)
        • 프로그래머스 lv2 (41)
        • 백준 - c++ (49)
        • Softeer (9)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    C언어 기초
    코딩기초
    선택정렬
    순차 탐색
    알고리즘
    코딩문제
    스택
    n진법 변환
    다이나믹 프로그래밍
    왜곡보정
    인접리스트
    정렬
    코딩테스트
    에라토슽네스의 체
    코딩기초스킬
    if문
    자료구조
    이미지처리
    캘리브레이션
    삽입 정렬
    백준
    BFS
    프로그래머스
    DFS
    큐
    그리디
    인접행렬
    코딩
    c언어
    소수찾기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩 코딩 코오딩
[프로그래머스] [1차] 프렌즈4블록 - 파이썬
상단으로

티스토리툴바