안녕하세요. 오늘은 프로그래머스 [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)])
}
}
오늘도 긴글 봐주셔서 감사합니다!
좋은하루 되세요! 😆
'Algorithm Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 나누어 떨어지는 숫자 배열, 두 정수 사이의 합, 문자열 내 마음대로 정렬하기 with Swift (0) | 2021.12.06 |
---|---|
[프로그래머스] 코딩테스트 연습 2018 KAKAO BLIND RECRUITMENT [1차] 다트 게임 with Swift (0) | 2021.12.05 |
[프로그래머스] 최소직사각형, 나머지가 1이 되는 수 찾기, 부족한 금액 계산하기 with Swift (0) | 2021.12.03 |
[프로그래머스] 예산, 두 개 뽑아서 더하기, 2016년 (0) | 2021.12.02 |
[프로그래머스] 약수의 개수와 덧셈, 3진법 뒤집기 (0) | 2021.12.01 |