상세 컨텐츠

본문 제목

[알고리즘풀기] 백준 11720번 숫자의 합 구하기

iOS 캐기/Interview

by Atlas 2022. 7. 19. 00:13

본문

728x90
반응형
문제 : N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

입력 
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

출력
입력으로 주어진 숫자 N개의 합을 출력한다.

 

문제분석하기 

문자열을 입력받고 문자 배열로 변환하고 순서대로 읽으면서 숫자형으로 변환해서 합을 구해야 한다. 

 

print("숫자의 개수를 입력")
let count = readLine()
print("숫자를 입력")
let numbers = readLine()

//2가지의 방법으로 풀어봄
print(solution(nums: numbers))
print(solution2(nums: numbers))

 

* Tips 백준에서는 모든 코드를 제출해야한다. 

여타 다른 프로그래머스 등의 시스템에서는 함수만 작성해서 제출하면 되다보니 백준에서도 함수만 넣어서 제출했는데

틀렸다고 떠서   당황하지 않고 전체코드를 복붙해서 넣었다. 

 

나는 자동완성덕후라 Xcode의 Command Line Tool 로 프로젝트를 생성해서 풀어보았다. 

 

 

 

Way 1. for문을 이용해서 풀어보는 방법 

func solution(nums: String?) -> Int {
    guard let nums = nums else { return 0 }
    
    let numArr = nums.map{$0} // Array(nums)
    var sum = 0
    
    for item in numArr {
        sum = sum + (Int(String(item)) ?? 0) //Cannot convert value of type 'String.Element' (aka 'Character') to expected argument type 'String'
    }
    
    return sum
}

 

1.realLine()을 통해서 받아온 값은 String?(옵셔널 스트링) 임으로 그대로 파라미터로 넘겨주고 

2.guarl let 구문을 통해서 data binding을 해주었다. 

3.문자열을 배열로 만들어 준다. map을 썼지만 Array(nums) 이렇게 해도 된다.

4.for 문을 사용하여 각 배열의 값의 접근하여 합해준다.

    Cannot convert value of type 'String.Element' (aka 'Character') to expected argument type 'String'

문자열을 배열로 변환하게 되면 각 배열에 Character로 저장이 되는데 Int에서 Character를 지원하지 않기 때문에 String으로 캐스팅을 한 이후에 Int형으로 캐스팅을 진행한다.

5.숫자의 합이 담긴 sum을 return 한다.

 

그리고 제출!

 

 

Way 2. 고차함수를 이용해서 풀어보는 방법 

func solution2(nums: String?) -> Int {
    guard let nums = nums else { return 0 }
    return  nums.reduce(0) { partialResult, value in
        guard let value = Int(String(value)) else { return partialResult}
        return partialResult + value
    }
}

스위프트에서는 또 다르게 풀 수 있을 거 같아서 고차함수를 이용해보았다.

고차함수라는 것은 다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수를 뜻한다. 

 

reduce는 데이터를 합쳐주기 위한 용도로 주로 사용하고, 내부의 값들을 결합해서 새로운 값을 만들어 낼 수 있는 아주 유용한 함수이다.

func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result

 

사용법은 이렇다고 볼 수 있다.

 

nums.reduce(초기값) { 부분결합값, 해당값 in
    return 부분결합값 + 해당값 // 부분결합값으로 이동!
}

 

2번째 방법으로도 제출해보자.

 

 

 

 

둘 다 통과! 

 

고차함수도 잘 사용해보자 :) 

 

github:

https://github.com/PotatoArtie/Potato-iOS/tree/master/Labs/B_11720

 

GitHub - PotatoArtie/Potato-iOS

Contribute to PotatoArtie/Potato-iOS development by creating an account on GitHub.

github.com

 

반응형

관련글 더보기

댓글 영역