Algorithm Problem Solving/Programmers

[프로그래머스] [1차] 비밀지도, 가운데 글자 가져오기 with Swift

코코자장자장 2021. 12. 4. 12:07

안녕하세요. 오늘은 프로그래머스 [1차] 비밀지도, 가운데 글자 가져오기 문제를 풀어보았습니다.

 

1. [1차] 비밀지도

 

    비밀지도는 아직 Swift 문법이 어색해서 살짝 시간이 오래걸렸는데요!

 

    문제 자체는 참 간단합니다!

 

    비트연산자 &, | 를 이용해서 문제를 풀 수 있는데요.

 

    처음에 1번지도와 2번지도를 합칠때는 OR 성질을 이용해 둘 중하나라도 1이면 1이 되도록해 지도를 겹쳐주는 역할을 합니다!

 

    다음번에는 encoding을 하면 되는데요.

 

    2진수를 문자열로 변환하는 과정을 한방에 하는 방법은 떠오르진 않았고 for문으로 1일때는 # 0일때는 공란이 들어가도록 코드를 구현하였습니다.

 

    구현 방법은 &연산자를 이용해서 구현하였습니다! 😄

 

func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
    var answer: [String] = []
    var arr3: [Int] = [Int]()
    
    for i in 0..<n {
        arr3.append(arr1[i] | arr2[i])
    }
    
    for i in 0..<n {
        var characterBuffer: [Character] = []

        for j in 0..<n {
            if (arr3[i] & 1 << (n-j-1)) != 0 {
                characterBuffer.append("#")
            }
            else {
                characterBuffer.append(" ")
            }
        }
        
        answer.append(String(characterBuffer))
    }
    
    
    return answer
}

 

2. 가운데 글자 가져오기

 

    두번째 문제는 가운데 글자 가져오기입니다!

 

    가운데 글자가져오기는 s의 count가 짝수냐 홀수냐에 따라 두글자를 가져올지 한글자를 가져올지를 정하고 return해주는 문제입니다!

 

    이 문제는 사실 Swift로 풀면 문자열 접근해서 한글자씩 빼오는게 가장 어렵다고 말할 수 있습니다.(사실 제가 초보자 ㅎㅎ)

 

    []대괄호로 index에 접근할 수 있지만 안에 복잡한 문자가 써있는 이유는 배열 접근하는 방법과 같기 때문에 차이점을 두어야 하기 때문에 이렇게 만들어진듯 합니다!

 

    하지만 방법만 안다면 쉽게 할 수 있죠!

 

    index 메소드에 파라메터로 startIndex or endIndex를 넣고 offset을 이용해서 간단하게 접근할 수 있습니다!

func solution(_ s:String) -> String {
    var count = s.count
    if (s.count % 2) == 0 {
        return String(s[s.index(s.startIndex, offsetBy: count/2-1)]) + String(s[s.index(s.startIndex, offsetBy: count/2)])
    }
    else {
        return String(s[s.index(s.startIndex, offsetBy: count/2)])
    }
}

 

오늘도 긴글 봐주셔서 감사합니다!

 

좋은하루 되세요! 😆