반응형
문제 풀이:
- A와 B의 길이가 다르면, 짧은 것이 먼저 온다.
- 만약 서로 길이가 같다면, A의 모든 자리수의 합과 B의 모든 자리수의 합을 비교해서 작은 합을 가지는 것이 먼저온다. (숫자인 것만 더한다)
- 만약 1,2번 둘 조건으로도 비교할 수 없으면, 사전순으로 비교한다. 숫자가 알파벳보다 사전순으로 작다.
문제에 명시된데로 정렬하면 된다.
2번에서 Int로 캐스팅되는 것만 더해서 비교하는 것만 따로 구현해준다.
코드:
Swift
var serials = [String]()
for _ in 0 ..< Int(readLine()!)! {
serials.append(readLine()!)
}
func getSum(_ s: String) -> Int {
let str = Array(s).map { String($0) }
var sum = 0
for char in str {
if Int(char) != nil {
sum += Int(char)!
}
}
return sum
}
serials.sort {
if $0.count == $1.count {
if getSum($0) == getSum($1) {
return $0 < $1
} else {
return getSum($0) < getSum($1)
}
} else {
return $0.count < $1.count
}
}
serials.forEach { print($0) }
Python
# 시리얼 번호 / 정렬
import sys
input = sys.stdin.readline
n = int(input())
serials = [input().strip() for _ in range(n)]
def get_sum(s):
sum = 0
for c in s:
if c.isdigit():
sum += int(c)
return sum
serials.sort(key= lambda x: (len(x), get_sum(x), x))
for serial in serials:
print(serial)
문제:
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[Algorithm/BOJ] 9466 - 텀 프로젝트 Swift (0) | 2021.06.17 |
---|---|
[Algorithm/BOJ] 6593 - 상범 빌딩 Swift (0) | 2021.06.17 |
[Algorithm/BOJ] 14500 - 테트로미노 Swift Python (0) | 2021.06.02 |
[Algorithm/BOJ] 4889 - 안정적인 문자열 Swift Python (0) | 2021.05.21 |
[Algorithm/BOJ] 18258 - 큐2 Swift Python (0) | 2021.05.12 |
댓글