티스토리 뷰

반응형

 

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

 

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

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

programmers.co.kr

 

난이도 : 레벨 2

 

구현만 잘한다면 무리 없이 풀 수 있는 문제입니다. 인접한 4개의 블록을 검사하고 이 블록들을 삭제하며 밑으로 내린 후 다시 검사하면 되는 문제입니다.

여기서 주의할 점은 4개의 블록을 검사하자마자 삭제 후 다음 블록을 검사한다면 부분 겹치는 블록이 있을 경우에 문제가 생깁니다. 저는 이 부분을 큐를 이용하여 모든 블록을 검사한 후에 한 번에 삭제할 수 있도록 처리했습니다.


전역 변수

boolean change = 블록판에서 변경이 있었는지 확인하는 변수

Queue<Integer> sameBlockX, sameBlockY = 삭제할 블록의 x, y 좌표 값

int answer = 출력해야 하는 정답을 저장하는 변수

함수

int solution

수월하게 처리를 하기 위해 String 1차원 배열을 char 2차원 배열로 변경했습니다.

블록에 변경이 있는지 확인하며 while문을 돌립니다. 모든 블록을 검사하며 4개의 인접한 블록이 같은지 확인합니다.

그 후 같은 블록들을 모두 제거합니다. 제거한 블록으로 인한 공백을 처리합니다.

(check4Block, remove, setting 호출)

 

void check4Block

인접한 4개의 블록을 확인합니다. 만약 이 4개의 블록이 같다면 전역 변수 Queue에 좌표값을 넣어줍니다.

 

void remove

Queue에 있는 제거해야 할 블록의 좌표값을 꺼내서 모두 제거합니다. 제거할 때 answer, change의 값을 변경해줍니다.

 

void setting

remove 함수를 통해 생성된 공백을 채웁니다. 1줄씩 확인하여 값들을 Stack에 모은 후 밑에서부터 채워 넣어 블록 사이에 있을 공백을 제거해줍니다.

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함