목록전체 글 (54)
Olive Study Room
* 15596은 swift 지원 안함! 15596 func sum(array: [Int]) -> Int{ return array.reduce(0, {$0+$1}) } let line = readLine()!.split(separator: " ").map({Int($0)!}) print(sum(array: line)) 4673 var arr2: Set = [] for i in 1...10000 { arr2.insert(i) } func d() { for index in 1...10000 { var result: Int = 0 var num: [Int] = [] var i = index result += i while i != 0 { num.append(i%10) i /= 10 } result += num...

갈수록.. 문제를 이해하는 시간이 오래걸린다... (단계별 풀이니까 당연함..) 해결 방법 암튼 숫자를 1(생성자)부터 넣어서 돌리고 나온 숫자를 모으면 셀프넘버가 아닌 수가 모이고, 1부터 10000을 갖는 배열에서 앞에서 모은 것을 빼면 된다. 하지만 모으지 않고 바로 이 수를 1부터 10000배열에서 remove 해주면 셀프넘버만 담긴 배열로 바꿀 수 있다. (전체에서 셀프넘버가 아닌 수를 뺀다는 이야기) 필요한 지식 1. 특정 값을 remove를 하려면 배열의 index값이 있어야 하는데, index값을 받아올 필요 없이 특정 값 요소를 없애려면 배열(array)가 아닌 Set으로 만들어주면 된다. * Set은 append가 아닌 말 그대로 insert기 때문에 중복을 제외해주고(여기서는 remo..

* 필요 지식 더보기 Int형과 Double형은 상호간에 나눌 수 없다. (당연함..) 나누려고 했을 때 0으로 출력되는 경우가 있는데 그 이유는 Int/Int -> Int Double/Double -> Double 이기 때문에 1(Int) / 5(Int) -> 0.2이렇게 출력되는게 아니라 1(Int) / 5(Int) -> 0(Int) 이렇게 출력된다. 그렇기 때문에 나누는 수 중 Double형이 있다면 다른 모든 변수도 Double로 형변환해주어야 한다. String.format(), NumberFormatter, ceil, floor, round * 설명된 모든 경우는 Foundation 프레임워크 내에 있다. import Foundation 1. 기본형 - ceil() 소수점 이하를 버리고 정수에..
map(_:) 시퀀스의 element에 대해 주어진 클로저를 맵핑한 결과를 포함하는 배열을 리턴한다. 주로 배열의 각 요소를 특정 수에 곱하거나 더하는 클로저를 갖는다. compactMap(_:) 이 시퀀스의 각 요소를 사용하여 지정된 변환을 호출한 결과 중 nil이 아닌 것을 포함하는 배열을 리턴한다. 적용하려는 배열의 요소 중 nil값이 있다면 map이 적용되지 않기 때문에 옵셔널바인딩해서 map으로 넘겨줄 수도 있다. nil인 요소를 제거해준다. let arr = [[1, 2], [3, nil], nil] 하지만 위와 같은 배열에서 요소는 [1, 2], [3, nil], nil 이렇게 총 세 가지이기 때문에 compactMap을 적용하고 출력하면 [1, 2], [3, nil]이렇게 두 요소가 출력된..

처음에 제출한 코드 let line = Int(readLine()!)! for _ in 1...line { var score: Int = 0 let result = readLine()!.split(separator: "X") for i in 0...result.count-1 { var scorePlus: Int = 1 result[i].forEach({_ in score += scorePlus scorePlus += 1 }) } print(score) } 1. X를 기준으로 찢어주고 2. 각 배열 내에서 char 하나씩 짚어가며 scoreplus를 하나씩 늘리며 더한다. 3. 이 scoreplus를 합친 score를 프린트한다. 런타임 에러가 난다. 아마 각 배열에 모든 char(O 하나하나)를 넘어갈 ..
10818 오류 다시 풀어보기 let line = Int(readLine()!)! var num = readLine()!.split(separator: " ").map({Int($0)!}) var maxNum: Int = -1000000 var minNum: Int = 1000000 for i in 0...num.count-1 { if num[i] > maxNum { maxNum = num[i] } if num[i] < minNum { minNum = num[i] } } print("\(minNum) \(maxNum)") 10818 - 2 let line = Int(readLine()!)! var num = readLine()!.split(separator: " ").map({Int(String($0))..

1은 처음 시도한 코드, 2는 다른 사람 코드. forEach 배열의 모든 경우를 돌려준다. for-in과 같지만 불필요한 for _ in 1...Arrray.count의 형태를 없애 코드를 줄일 수 있다. 1. for-each로 0부터 9까지 돌려가며 같은 값 찾기(정수를 모든 자리를 배열로 만들기) var value: Int = 1 var arr: [Int] = Array.init(repeating: 0, count: 10) for _ in 1...3 { let line = Int(readLine()!)! value *= line } var result = String(value) let arr2 = Array(result).map({String($0)}) arr2.forEach({ for i in ..

이 문제를 푸는데 게속 시간 초과가 났다. let line = Int(readLine()!)! var num = readLine()!.split(separator: " ").map({Int(String($0))!}) var maxNum: Int = -1000000 var minNum: Int = 1000000 for i in 0...num.count-1 { if num[i] > maxNum { maxNum = num[i] } if num[i] < minNum { minNum = num[i] } } print("\(minNum) \(maxNum)") 첫 제출한 코드인데 num.min, num.max로 간결하게 바꿔도 동일한 오류가 났다. 구글링해 본 결과 var num = readLine()!.split(..