Where who wants to meet someone
배열의 길이를 2의 거듭제곱으로 만들기 본문
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/181857
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 답안 / 다른 사람들의 답안
import Foundation
func solution(_ arr:[Int]) -> [Int] {
var arr = arr
var powArr = [Int]()
for i in 0...10 {
powArr.append(Int(pow(2.0, Float(i))))
}
if powArr.contains(arr.count) {
return arr
} else {
while !powArr.contains(arr.count) {
arr.append(0)
}
return arr
}
}
- arr의 길이는 최대 1,000이기 때문에 2의 거듭제곱 중 1000과 근사한 1024까지만 비교하면 된다.
- powArr에 for문을 통해 0부터 10까지 2의 거듭제곱을 한 값을 넣어준다(1 ~ 1024)
- arr의 길이가 powArr에 포함되는 값이면 바로 반환하고, 아니라면 포함되는 값이 될 때까지 0을 더해주고 반환했다.
// 풀이 1
import Foundation
func solution(_ arr:[Int]) -> [Int] {
var i = 1
while i < arr.count { i <<= 1 }
return arr + Array(repeating: 0, count: abs(arr.count - i))
}
// 풀이 2
import Foundation///
func solution(_ arr:[Int]) -> [Int] {
let t = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
var arr = arr
while !t.contains(arr.count) {
arr.append(0)
}
return arr
}
- 풀이 1에서 i가 arr.count보다 작다면 왼쪽으로 1비트 시프트 하는 작업(2배로 곱하는)을 수행
- 반복문이 끝나면 i는 arr의 길이와 같거나 큰 2의 거듭제곱이 됨
- arr의 길이와 i값의 차이만큼 0을 반복한 배열을 기존 배열에 더해서 반환
점수: +10
'프로그래머스 알고리즘 문제 기록 > 코딩 기초 트레이닝' 카테고리의 다른 글
배열 만들기 6 (0) | 2024.02.13 |
---|---|
세 개의 구분자 (1) | 2024.02.13 |
날짜 비교하기 (0) | 2024.02.08 |
빈 배열에 추가, 삭제하기 (0) | 2024.02.05 |
이차원 배열 대각선 순회하기 (0) | 2024.02.01 |