프로그래머스 1단계) 하샤드수

2021. 12. 2. 18:12Algorithm/알고리즘

728x90
반응형

문제

17:06~17:48 (18:17

첫시도

import Foundation
//하샤드수

func solution(_ x:Int) -> Bool {
    var stringNum = String(x)
    var numArr: [Character] = []
    for i in 0..<stringNum.count {
        numArr.append(stringNum[stringNum.index(stringNum.startIndex, offsetBy: i)])
    }
    var result = numArr.map{Int(String($0))!}.reduce(0) {$0 + $1}
    switch result % stringNum.count {
    case 0:
        return true
    default:
        return false
    }
}

두번째시도

func solution(_ x:Int) -> Bool {
    var stringNum = String(x)
    var numArr: [Character] = []
    for i in 0..<stringNum.count {
        numArr.append(stringNum[stringNum.index(stringNum.startIndex, offsetBy: i)])
    }
    var result = numArr.map{Int(String($0))!}.reduce(0) {$0 + $1}
    switch result % numArr.count {
    case 0:
        return true
    default:
        return false
    }
}

 

x가 2345일때 numArr는 ["2", "3", "4", "5"] result는 14..

아 이런 된장.. 문제를 잘못 이해했던 거였음. swich문의 값을 x % result로 하니까 해결.. 졸리니...?

 

 

나중에 다시 풀어본거

func solution(_ x:Int) -> Bool {
    var str = String(x)
    var arr = [String]()
    for i in str {
        arr.append(String(i))
    }

    var sum = arr.reduce(0) {Int(exactly: $0)! + Int($1)!}
    return Int(str)! % sum == 0 ? true : false
}

 

 

최종제출답안

func solution(_ x:Int) -> Bool {
    var stringNum = String(x)
    var numArr: [Character] = []
    for i in 0..<stringNum.count {
        numArr.append(stringNum[stringNum.index(stringNum.startIndex, offsetBy: i)])
    }
    var result = numArr.map{Int(String($0))!}.reduce(0) {$0 + $1}
    switch x % result {
    case 0:
        return true
    default:
        return false
    }
}

다른사람풀이

func solution(_ x:Int) -> Bool {
    return x % String(x).reduce(0, {$0+Int(String($1))!}) == 0
}

 

느낀점

빨리 푸는것도 중요하지만 문제이해가 덜 된 상태로 풀다보면 계속 오답이 나올수밖에 없어.

좀 헷갈린다 싶으면 종이에 적고 문제 이해하면서 풀자.

그리고 배열관련된게 있으면 굳이 배열을 만들지 않고 map, reduce로 해결할 순없는지 고차함수 이용하는거 생각해보기

 

유의미한 정답코드

 

728x90
반응형