적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Algorithm/Programmers

[Swift 알고리즘] Programmers Lv.2 기초 문제들

hongssup_ 2022. 11. 3. 01:41
반응형

드디어 레벨 2 문제로 넘어왔다! 

근데 레벨 2 라고 다 어려운게 아니네.. 1보다 쉬운 문제들이 많구만

한 번만에 통과한 기초문제들을 모아보겠다. 

 

완전탐색 (35분)

카펫

문제 설명
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

입출력 예시

print(solution(10, 2)) //[4, 3]
print(solution(8, 1)) //[3, 3]
print(solution(24, 24)) //[8, 6]

내 답안

import Foundation

func solution(_ brown:Int, _ yellow:Int) -> [Int] {
    var result = [Int]()
    let num = (brown - 4)/2
    for i in 1..<num {
        if i * (num - i) == yellow {
            result.append(num - i + 2)
            result.append(i + 2)
            break
        }
    }
    return result
}

yellow의 가로x세로 값 x2 + 4 하면 brown 갯수가 된다는 규칙을 찾았다. 

따라서 (brown - 4)/2 해준 값으로 반복문을 돌려, 곱하면 yellow 갯수가 되는 가로 세로 길이를 찾아주었다.

 

 

월간 코드 챌린지 시즌1 (30분)

이진 변환 반복하기

문제 설명
0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.
1. x의 모든 0을 제거합니다.
2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.
0과 1로 이루어진 문자열 s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- s의 길이는 1 이상 150,000 이하입니다.
- s에는 '1'이 최소 하나 이상 포함되어 있습니다.

입출력 예시

print(solution("110010101001")) //[3,8]
print(solution("01110")) //[3,3]
print(solution("1111111")) //[4,1]

내 답안

import Foundation

func solution(_ s:String) -> [Int] {
    var convertCount = 0
    var zeroCount = 0
    var s = s
    while s != "1" {
        let count = s.filter{ $0 == "1" }.count
        zeroCount += (s.count - count)
        s = String(count, radix: 2)
        convertCount += 1
    }
    return [convertCount, zeroCount]
}

문제를 잘못 이해해서 쓸데없이 좀 오래 걸렸다. 

1. s의 모든 0을 제거

- filter 써서 1들의 count를 반환하도록 했다.

- s.replacingOccurrences(of: "0", with: "") 도 써봤는데 filter가 훨씬 빠른 것 같더라. 

2. s의 길이를 2진법으로 표현한 문자열로 변경

=> 이 두가지 단계를 다 거치는 것이 하나의 변환 과정. 

3. [변환 횟수, 제거된 0 갯수] 반환

 

스택/큐 (10분)

올바른 괄호

 

 

 

연습문제 (10분)

최솟값 만들기

 

연습문제 (30분)

JadenCase 문자열 만들기

 

연습문제 (10분)

최댓값과 최솟값

 

 

 

 

 

 

 

 

 

 

728x90
반응형