백준_나이정렬_swift

나의코드:

var N = Int(readLine()!)!
var newList : [[Any]] = Array(repeating: [], count: N)
//print(newList)

for index in 0..<N {
    let info = readLine()!.components(separatedBy: " ")
    let age = Int(info[0])!
    let name = info[1]

    newList[index].append(index)
    newList[index].append(age)
    newList[index].append(name)
}

var resultList = newList.sorted { anyList1, anyList2 in
    if let listAge = anyList1[1] as? Int ,
       let list2Age = anyList2[1] as? Int,
       let listIndex = anyList1[0] as? Int,
       let list2Index = anyList2[0] as? Int
    {
        if listAge == list2Age {
            return listIndex < list2Index
        }
        return listAge < list2Age
    }
    return false
}
//print(newList)
for index in 0..<resultList.count {
    print("\(resultList[index][1]) \(resultList[index][2])")
}
  • Any타입을 연습하기 위해 사용해보았다.
  • sorted 클로저를 사용해보았다.

아래는 다른분 코드 인데, split을 사용할 경우 아래 append를 할때 string으로 받지못하고 substring로 받는다. 따라서 map을 이용해 string으로 바꿔야한다.

그러나 아래와 같이 components는 string으로 바꿔줘서 바로 사용할 수 있다.

아래와 같이 입력받는 연습을 했다. 다양한 케이스에 준비하기위해.

아래와 같이 비교 할 수도 있지만 보기가 안좋다..

아래는 다른 분의 깔끔한 코드.

  • 100,000 이라는 큰 숫자를 건드리지 않고 나이 200 이라는 작은 숫자를 이용했다. 발상의 전환 굿..

다른 분 코드 출처: https://www.acmicpc.net/source/27314300

좋은 웹페이지 즐겨찾기