Carnival7
Change Developer
Carnival7
전체 방문자
오늘
어제
  • 분류 전체보기
    • 자바의 정석
    • 프로그래밍 언어별 tools
      • 파이썬
      • 자바
    • 코딩 테스트
      • 백준 강의 기초편
      • 백준 강의 연습편
      • 백준 강의 문제편
      • 삼성 기출
      • 백준 - 일반
      • 카카오 기출
      • 프로그래머스 - 일반
      • 코테 풀이 Tools
    • CS
      • Network
      • 운영체제
      • 알고리즘
      • DB
    • Web_Backend
      • Spring
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
      • 스프링 핵심 원리 - 기본편
    • DevOps
    • IT 업무 지식
      • 인프라
      • 클라우드
    • 자격증
      • AWS - CLF
      • 정처기 - 실기
    • 생각 정리

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 슬라이딩 윈도우
  • DevOps
  • code deploy
  • 프로그래머스 #카카오기출 #레벨2
  • 알고리즘 #백준강의기초편 #코딩테스트
  • 슬라이딩 윈도우 #덱
  • 코딩테스트 #삼성기출 #구현 #시뮬레이션
  • 삼성기출 #백준강의문제편
  • DMZ
  • Github Actions
  • 스프링 #인터셉터 #AOP #필터
  • 스프링 부트 무중단 웹 서비스
  • ci/cd
  • 스프링 #AOP
  • nginx
  • 삼성기출 #2023 #상반기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Carnival7
코딩 테스트/카카오 기출

레벨2. [1차] 프렌즈 4블록

코딩 테스트/카카오 기출

레벨2. [1차] 프렌즈 4블록

2022. 4. 12. 12:45

https://programmers.co.kr/learn/courses/30/lessons/17679

 

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

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

programmers.co.kr

 

 

1. 지워야 하는 블록을 찾아서 c 에 True로 표시한다. 같은 블록은 여러 2×2에 포함될 수 있으며, 지워지는 조건에 만족하는 2×2 모양이 여러 개 있다면 한꺼번에 지워진다. 같은 게 없다면 break 한다.

2. 지워야 하는 블록을 'a'으로 변경해준다.

3. 아래에 공백이 생긴 경우 블록을 내려준다. 이때, 움직이는 대상이 없어질 때까지 이동시킨다.

 

1-3의 과정을 더 이상 옮길게 없고 지워지는 블록도 없을 때까지 반복한다. 

 

def process(n,m,a):
    # 4칸 같은 게 있는 지 체크
    c=[[False]*m for _ in range(n)]

    # 같은 게 있으면 True
    ok=False

    # board 탐색 - 같은 4개 찾기
    for x in range(n-1):
        for y in range(m-1):
            if a[x][y]!="a" and a[x][y] == a[x+1][y] == a[x][y+1] == a[x+1][y+1]:
                c[x][y] = c[x+1][y] = c[x][y+1] = c[x+1][y+1]=True
                ok=True

    return ok,c

def solution(m, n, board):
    n,m=m,n
    answer = 0

    a=[[0] * m for _ in range(n)]
    for i in range(len(board)):
        a[i]=list(board[i])

    while True:
        ok,c = process(n,m,a)
        # 같은 게 없다면 break
        if not ok:
            break

        # c에서 True 인 같은 것들 없애기(a로 변환)
        for x in range(n):
            for y in range(m):
                if c[x][y]:
                    a[x][y] = "a"
                    # 같은 블록의 개수 answer에 더하기
                    answer+=1


        # board 에서 'a'인 칸들 무시하고 블럭 떨어뜨리기
        cnt = 1
        while cnt: # 움직이는 대상이 더 없어 0이 될 때까지
            cnt=0 # 움직이는 대상의 수
            for x in range(n-1):
                for y in range(m):
                    if a[x][y]!="a" and a[x+1][y]=="a":
                        a[x][y],a[x+1][y] = a[x+1][y],a[x][y]
                        cnt+=1

    return answer
    Carnival7
    Carnival7

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.