프로그래머스- 36

김정현·2023년 5월 17일
0

프로그래머스

목록 보기
36/46

1.

검색결과 firstIndex(of:) 를 사용하면 인덱스의 위치를 찾을 수 있다고한다.

func solution(_ seoul:[String]) -> String {
    var x = seoul.firstIndex(of:"Kim")!
    return "김서방은 \(x)에 있다"
}

키워드만 알면 쉽게 해결되는 문제였다.

func solution(_ seoul:[String]) -> String {
    return "김서방은 \(seoul.index(of: "Kim")!)에 있다"
}

이렇게 아예 더 생략하는 방법이 있는데, 만약 프로젝트라 생각하면 x라는 것을 생략하지 않는것이 더 좋은 방법인 듯 하다.

2.

배열 내에서 포함되지 않은 수를 찾는다.
contains와 for 구문을 사용하여 1~9까지 찾으면 될 거 같다. (0은 덧셈에서 의미 없으니)

import Foundation

func solution(_ numbers:[Int]) -> Int {
    var result: Int = 0
    for i in 0...9 {
        let x = numbers.contains(i)
        if x == false {
            result += i
        } return result
    }  
}

오류가 발생했다. 리턴을 for 구문 안에 넣으면 안 되는 것같다.

import Foundation

func solution(_ numbers:[Int]) -> Int {
    var result: Int = 0
    for i in 0...9 {
        let x = numbers.contains(i)
        if x == false {
            result += i
        } 
    }  
    return result
}

리턴은 마지막 괄호에 포함시키도록 하자.
다른 사람은

func solution(_ numbers: [Int]) -> Int {
    return (0...9).filter { !numbers.contains($0) }.reduce(0, +)
}

필터와 리듀스를 포함해 깔끔하게 해결하였다.

3.

정답률이 67프로짜리 여태 풀었던 문제들에 비하면 압도적으로 낮은 문제였다. 낮은 정답률답게 접근부터가 어려웠다.

우여곡절끝에

import Foundation

func solution(_ numbers:[Int]) -> [Int] {
    var result: [Int] = []
    for i in 0...numbers.count-1 {
        for a in i+1...numbers.count-1{
            result.append(numbers[i] + numbers[a])
        }
    }
    return Array(Set(result))
}

for문을 중첩으로 사용하고, Set을 사용하면 중복함수도 제거된다는것을 알게돼서 했으나 계속 오류가 발생했다.

겨우겨우 찾아낸 오류 발생 이유는 a for문에서 i+1 범위가 뒤에 범위보다 커지는 경우가 발생해버려서 그런것이었다. 그래서 최종적으로

import Foundation

func solution(_ numbers:[Int]) -> [Int] {
    var result: [Int] = []
    for i in 0...numbers.count-1 {
        if i < numbers.count-1 {
            for a in i+1...numbers.count-1 {
            result.append(numbers[i] + numbers[a])
            }
        }
    }
    return Array(Set(result)).sorted()
}

if문으로 감싸서 해결하였다.
다른 사람은

import Foundation

func solution(_ numbers:[Int]) -> [Int] {
    var result = [Int]()

    for i in 0 ..< numbers.count {
        for j in i + 1 ..< numbers.count {
            let num = numbers[i] + numbers[j]
            if !result.contains(num) {
                result.append(num)
            }
        }
    }
    return result.sorted()
}

이런식으로 !contains를 통해 중복 요소를 제거하였다. 그리고 부등호를 사용하여 내가 발생시켰던 오류를 사전에 차단하였다.

0개의 댓글