Array is a collection of elements, all of the same type, that could be set and retrieved via continuous series of integers, or what are more commonly known as indices.
get/set | Insert | Delete | Resize | |
---|---|---|---|---|
Time Complextity | O(1) | O(n) | O(n) | O(n) |
※ 참고: https://developer.apple.com/documentation/swift/array
https://app.codility.com/programmers/lessons/2-arrays/cyclic_rotation/
문제 설명
주어진 배열을 K번 회전시켜(= 마지막 요소를 맨 앞으로 이동시키는 것을 '회전'이라 함) 주석 처리와 같은 결과를 얻을 수 있게 하세요.
예를 들어, 주어진 배열이 [1, 2, 3, 4, 5]라면 1번 회전 후 얻을 수 있는 결과값은 [5, 1, 2, 3, 4]여야 합니다.
solution(A: [1, 2, 3, 4, 5], K: 1) // 5 1 2 3 4
solution(A: [1, 2, 3, 4, 5], K: 2) // 4 5 1 2 3
solution(A: [1, 2, 3, 4, 5], K: 3) // 3 4 5 1 2
접근 방식 - stack 사용
코드
/*using stacks*/
func solution(A: [Int], K: Int) -> [Int] {
guard !A.isEmpty else {return []} //주의❗️
guard K > 0 else {return A} //주의❗️
var rotateArray:[Int] = A
for _ in 0 ..< K {
rotateArray.insert(rotateArray.last!, at: 0)
rotateArray.popLast()
}
return rotateArray
}
문제
링크 : https://leetcode.com/problems/reformat-phone-number/
You are given a phone number as a string number. number consists of digits, spaces ' ', and/or dashes '-'.
You would like to reformat the phone number in a certain manner. Firstly, remove all spaces and dashes. Then, group the digits from left to right into blocks of length 3 until there are 4 or fewer digits. The final digits are then grouped as follows:
The blocks are then joined by dashes. Notice that the reformatting process should never produce any blocks of length 1 and produce at most two blocks of length 2.
Return the phone number after formatting.
접근 방식
- 주어진 문자열에서 number가 아닌 문자를 걸러내기 (공백이나 -)
- 주어진 문자열이 4글자 이상인지 확인하기
- 4글자 초과라면
1) 반복문을 통해 앞에서 3글자 단위로 끊어주고 그 뒤에 '-' 를 붙여주기
2) 3글자를 해당 문자열에서 제거하기- 4글자라면
1) 4글자 남았다면 2글자 단위로 끊어 '-'로 연결하기
2) 4글자가 아닌 그 이하라면 단순히 String Interpolation으로 문자들을 연결해 주기
코드
class Solution {
func reformatNumber(_ number: String) -> String {
var numbers = Substring(number.filter{$0.isNumber})
var result = ""
while numbers.count > 4 {
result += "\(numbers.prefix(3))-"
numbers = numbers.dropFirst(3)
}
return numbers.count == 4 ?
"\(result)\(numbers.prefix(2))-\(numbers.suffix(2))"
: "\(result)\(numbers)"
}
}
문제
When someone searches their contacts based on a phone number, it's nice when a list
of contact pops up.
Write an algorithm that searches you contacts for phone number strings, and returns:
A = ["pim", "pom"] // Contacts (return one of these)
B = ["999999999", "777888999"] // Phone numbers for each contact A[i] = B[i]
P = "88999" // Search phrase - "pom" 출력
접근 방식
⭐️ Dictionary 활용하기
1. 주인이 이름인 A배열이 key이고, 전화번호인 B 배열이 value로 구성된 dictionary만들기(reason. 전화 번호의 주인의 이름과 전화 번호는 1대1 매칭되므로)
2. dictionary의 value가 P와 일치하는 딕셔너리 구하기
3. 개수에 따라 분기 처리하기
코드
public func solution(_ A : [String], _ B : [String], _ P : String) -> String {
var dictArray: [String: String] = [:]
for index in 0 ..< A.count {
dictArray[A[index]] = B[index]
}
let matches = dictArray.filter{$0.value.contains(P)}
if matches.count == 0 { //일치하는 게 하나도 없을 경우
return "NO CONTACT"
} else if matches.count == 1 { //1개만 일치할 경우
return matches.first!.key
}
return matches.keys.sorted().first! //여러 개 일치 시 알파벳 순서로 정렬 후 출력
}