Algorithm Problem Solving/Programmers

[프로그래머스] 코딩테스트 연습 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 행렬 테두리 회전하기 with Swift

코코자장자장 2021. 12. 22. 15:35

안녕하세요! 오늘은 프로그래머스 행렬 테두리 회전하기 문제를 풀어보겠습니다!

행렬 테두리 회전하기 문제는 문제를 읽어봤을때 제약조건에 의해 모두 문제대로 구현만해도 time over가 아니기 때문에 모두 구현하여 풀었습니다.(한시간정도 걸렸네요... ㅠ)

 

문제를 풀때 4부분으로 나누어 옮겼습니다.

 

각각 배열을 만들어 배열에 넣어놓고 꺼내면서 다시 배치하였습니다.

위 그림처럼 나눴고 저것을 다시 재배치하였습니다.

 

과정에서 min값을 찾아서 answer 배열에 넣어놓고 return해준다면 문제가 해결됩니다.

 

import Foundation

func solution(_ rows:Int, _ columns:Int, _ queries:[[Int]]) -> [Int] {
    
    var leftSide:[Int] = []
    var rightSide:[Int] = []
    var topSide:[Int] = []
    var bottomSide:[Int] = []
    
    var minimumNumbers:[Int] = []
    var minimumNumber:Int = 0
    
    var map:[[Int]] = []
    for row in 0..<rows {
        map.append([])
        for column in 0..<columns {
            map[row].append( row * columns + column + 1 )
        }
    }
    
    
    for i in queries {
        minimumNumber = 100001
        for j in (i[0]+1)...i[2] {
            leftSide.append(map[j-1][i[1]-1])
            if minimumNumber > map[j-1][i[1]-1] {
                minimumNumber = map[j-1][i[1]-1]
            }
        }
        for j in i[0]..<i[2] {
            rightSide.append(map[j-1][i[3]-1])
            if minimumNumber > map[j-1][i[3]-1] {
                minimumNumber = map[j-1][i[3]-1]
            }
        }
        for j in i[1]..<i[3] {
            topSide.append(map[i[0]-1][j-1])
            if minimumNumber > map[i[0]-1][j-1] {
                minimumNumber = map[i[0]-1][j-1]
            }
        }
        for j in (i[1]+1)...i[3] {
            bottomSide.append(map[i[2]-1][j-1])
            if minimumNumber > map[i[2]-1][j-1] {
                minimumNumber = map[i[2]-1][j-1]
            }
        }
        
        for j in (i[0]+1)...i[2] {
            map[j-2][i[1]-1] = leftSide[0]
            leftSide.remove(at:0)
        }
        for j in i[0]..<i[2] {
            map[j][i[3]-1] = rightSide[0]
            rightSide.remove(at:0)
        }
        for j in i[1]..<i[3] {
            map[i[0]-1][j] = topSide[0]
            topSide.remove(at:0)
        }
        for j in (i[1]+1)...i[3] {
            map[i[2]-1][j-2] = bottomSide[0]
            bottomSide.remove(at:0)
        }
        
        minimumNumbers.append(minimumNumber)
    }
    return minimumNumbers
}

오늘은 여기까지입니다!

 

모두들 감기조심하시구 좋은 하루 되세요!