Skip to content

[Algorithm] 프렌즈4블록 #71

Description

@hwangJi-dev

💬 문제

[코딩테스트 연습 - [1차] 프렌즈4블록](https://school.programmers.co.kr/learn/courses/30/lessons/17679)


💬 Idea

  1. board를 세로형 2차원 배열로 바꾼다.
  2. 지워지는 좌표를 (4블록)탐색해서 point에 넣어준다.
  3. removePoint에 값들이 들어있다면 해당 좌표를 “-”로 바꾸고, result에 개수를 더해준다.
  4. “-”로 표시된 블록(지워진 블록) 위에 있는 블록들을 내린다.

💬 풀이

func solution(_ m:Int, _ n:Int, _ board:[String])->Int{varboardArr:[[String]]=Array(repeating:Array(repeating:"", count: m), count: n)varresult=0varisBreak=Array(repeating:false, count: m)varpoint:Set<[Int]>=[]
// 세로형 2차원 배열로 바꾸기
foriin0...board.count -1{letk=Array(board.reversed()[i]).map({String($0)})forjin0...k.count -1{boardArr[j][i]=k[j]}}isBreak[0]=truewhile isBreak.contains(true){foriin0...m -2{varbreakArr=Array(repeating:false, count: n)forjin0...n -2{ifboardArr[j][i]==boardArr[j][i +1] && boardArr[j][i +1]==boardArr[j +1][i +1] && boardArr[j][i +1]==boardArr[j +1][i] && boardArr[j][i]!="" && boardArr[j][i].allSatisfy({ $0.isUppercase }){
point.insert([j, i])
point.insert([j, i +1])
point.insert([j +1, i +1])
point.insert([j +1, i])breakArr[j]=true}else{breakArr[j]=false}}if breakArr.contains(true){isBreak[i]=true}else{isBreak[i]=false}}
// point에 들어간 좌표들 "-"로 바꾸기
if !point.isEmpty {forkin point.sorted(by:{$0[0]<$1[0]}){boardArr[k[0]][k[1]]="-"}}
// "-"로 바꾼 부분 삭제하고 삭제된만큼 ""로 채우기
for(index, l)in boardArr.enumerated(){boardArr[index]= l.filter({ $0 !="-"})ifboardArr[index].count < m {for_in1...m - boardArr[index].count {boardArr[index].append("")}}}
result += point.count
point.removeAll()}return result
}print(solution(4,5,["CCBDE","AAADE","AAABF","CCBBF"]))print(solution(6,6,["TTTANT","RRFACC","RRRFCC","TRRRAA","TTMMMF","TMMTTJ"]))print(solution(6,6,["AABBEE","AAAEEE","VAAEEV","AABBEE","AACCEE","VVCCEE"]))print(solution(2,2,["aa","aa"]))

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions