• BOJ
  • Set
  • sort(by: ~)
  • programmers

problem 1181 단어 정렬

What is a Set?

Set : 순서가 없는 중복되지 않는 값들의 Collection

var forceAwakens = Set<String>()
forceAwakens.count // 0
forceAwakens.isEmpty // true
forceAwakens.insert("Rey") // 이제 forceAwakens에 하나의 아이템으로 "Rey"가 담겨집니다.
forceAwakens.count // 1

to Array

stringArray = Array(Set(stringArray))

we can change Set type to Array

sort(by: (String, String) throws -> Bool)

When you want to sort a collection of elements that don’t conform to the Comparable protocol, pass a closure to this method that returns true when the first element should be ordered before the second.

/*
 백준 1181 문제
 */

import Foundation

let N: Int! = Int(readLine()!)!
var stringArray: [String] = []

for _ in 0..<N {
    let tmpString: String = readLine()!
    stringArray.append(tmpString)
}

func solution() {
    stringArray = Array(Set(stringArray))
    
    stringArray.sort { (string1, string2) -> Bool in
        if string1.count < string2.count {
            return true
        }
        else if string1.count == string2.count {
            return string1 < string2
        }
        return false
    }
    
    for element in stringArray {
        print(element)
    }
}

solution()

problem 10989 수 정렬하기 3

스위프트로 할 수 없는 문제

sort 알고리즘 문제

problem 11650 좌표 정렬하기

/*
 백준 1181 문제
 */

import Foundation

let N: Int! = Int(readLine()!)!
var array: [[Int]] = []

for _ in 0..<N {
    let line = readLine()!
    let lineArr = line.components(separatedBy: " ")
    let IntArr = lineArr.map { (element) -> Int in
        Int(element)!
    }
    array.append(IntArr)
}

func solve() {
    array.sort { (IntArr1, IntArr2) -> Bool in
        if IntArr1[0] < IntArr2[0] {
            return true
        } else if IntArr1[0] == IntArr2[0] {
            if IntArr1[1] < IntArr2[1] { return true }
        }
        return false
    }
    
    array.forEach { (IntArr) in
        print(IntArr[0], IntArr[1])
    }
}

solve()

problem 11004 K번째 수

시간 초과

Promrammers K번째 수

func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
    var resultArr: [Int] = []
    
    commands.forEach { (arr) in
        let firstIndex = arr[0] - 1
        let secondIndex = arr[1] - 1
        let thirdIndex = arr[2] - 1
        
        var willSortedArray: [Int] = []
        let slicedArr = array[firstIndex...secondIndex]
        
        willSortedArray.append(contentsOf: slicedArr)
        willSortedArray.sort()
        resultArr.append(willSortedArray[thirdIndex])
    }
    
    return resultArr
}

print(solution([1, 5, 2, 6, 3, 7, 4], [[2, 5, 3], [4, 4, 1], [1, 7, 3]]))
let slicedArr = array[firstIndex...secondIndex]

index가 그대로 유지되어서 온다.

func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
    var resultArr: [Int] = []
    
    commands.forEach { (arr) in
        var slicedArray: [Int] = []
        slicedArray.append(contentsOf: array[arr[0] - 1...arr[1] - 1])
        slicedArray.sort()
        resultArr.append(slicedArray[arr[2] - 1])
    }
    return resultArr
}

print(solution([1, 5, 2, 6, 3, 7, 4], [[2, 5, 3], [4, 4, 1], [1, 7, 3]]))
Array(array[arr[0] - 1...arr[1] - 1])

이렇게 Array로 감싸버리면 된다. (다른 사람 코드 참고)

위를 참고하여 리팩토링 진행

        var slicedArray = Array(array[arr[0] - 1...arr[1] - 1])
        slicedArray.sort()
        resultArr.append(slicedArray[arr[2] - 1])

더 빨라진 느낌!

태그: ,

카테고리:

업데이트:

댓글남기기