프로그래머스 1단계) 하샤드수
2021. 12. 2. 18:12ㆍAlgorithm/알고리즘
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
반응형
'Algorithm > 알고리즘' 카테고리의 다른 글
프로그래머스 1단계) 콜라츠추측 (0) | 2021.12.02 |
---|---|
프로그래머스 1단계) 평균구하기 (0) | 2021.12.02 |
프로그래머스 레벨1) 핸드폰 번호 가리기 (0) | 2021.12.01 |
프로그래머스 레벨1) 행렬의 덧셈 (0) | 2021.12.01 |
프로그래머스 레벨1) x만큼 간격이 있는 n개의 숫자 (0) | 2021.11.30 |