목록cs/알고리즘 (14)
Olive Study Room

1. arithmetic overflow let readline = readLine()!.split(separator: " ").map{ Int($0)! } print(readline[0] + readline[1]) Int 형 덧셈에서 arithmetic overflow 오류가 났는데, input으로 준 값인 9223372036854775807는 2진수로 변환했을 때 111111111111111111111111111111111111111111111111111111111111111이고 64비트의 최대값이 된다. print(Int.max) // 9223372036854775807 print(String(Int.max, radix: 2)) // 111111111111111111111111111111111111..
런타임 오류는 비정상적인 종료로 인해 나는 것으로, 나는 optional을 강제 언랩핑하면서 출력했는데 nil이 받아져서 오류가 났다. var count = Int(readLine()!)! var k: [Int] = [] var zerofloor: [Int] = [] var nextfloor: [Int] = [] for _ in 0..

문자열 중 가장 많이 나온 char를 출력해야하는 문제! + 나온 수가 같은 경우 ?를 출력한다. 처음에 문자열을 나눠 배열로 만들기는 했으나 각 char가 등장한 횟수를 카운트해야한다. 처음엔 전역 var count: Int로 셌으나 코드가 너무 복잡해지고 1. 같은 char가 있는지 2. count중 가장 큰 수 3. 2의 인덱스를 맞아와 char출력 이렇게 계속 반복해야하는 횟수가 많아져 시간초과가 났다. count와 char를 한번에 처리하기 위해 Dictionary를 만들어보기로 했다. ([String : Int]) dictionary 는 key로 처리하기 때문에 dic을 계속 만들지 않고 이미 key가 있는지 확인하여 count를 올릴 수 있다. Dictionary를 사용한지 꽤 오래돼서 사용..
11654 let line = Character(readLine()!) print(Int(line.asciiValue!)) 11654 - 2 print(Character(readLine()!).unicodeScalars.first!.value) 11720 런타임 에러 let line = Int(readLine()!)! var line2 = Int(readLine()!)! var sum: Int = 0 while line2 != 0 { sum += line2%10 line2 /= 10 } print(sum) 11720 - 2 let line = Int(readLine()!)! var line2 = readLine()! var sum: Int = 0 line2.forEach({ sum += Int(Strin..
* 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..

처음에 제출한 코드 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))..