https://www.acmicpc.net/problem/1431
문제 설계
1. 길이가 짧은 게 앞에 오도록 정렬
2. 길이가 같다면 문자열에 속한 숫자의 합이 작은 것이 앞에 오도록 정렬
3. 1번과 2번으로 비교 불가능할 경우 사전순으로 정렬
문제 풀이
n=int(input())
serials=[]
for _ in range(n):
serials.append(input())
def d_sum(x):
d=0
for i in x:
if i.isdigit():
d+=int(i)
return d
serials.sort(key=lambda x: (len(x),d_sum(x),x))
for word in serials:
print(word)
(2) 직접구현
n = int(input())
serials = []
for _ in range(n):
serials.append(input())
for i in range(n-1):
for j in range(i+1, n):
if len(serials[i]) > len(serials[j]):
serials[i], serials[j] = serials[j], serials[i]
elif len(serials[i]) == len(serials[j]):
suma=0
sumb=0
for x,y in zip(serials[i],serials[j]):
if x.isdigit():
suma+=int(x)
if y.isdigit():
sumb+=int(y)
if suma > sumb:
serials[i],serials[j] = serials[j], serials[i]
elif suma == sumb:
for x,y in zip(serials[i], serials[j]):
if x > y:
serials[i],serials[j] = serials[j], serials[i]
break
elif x < y:
break
for i in serials:
print(i)
정리
isdigit() 함수는 문자열을 대상으로 사용하는 함수
s = '3'
s.isdigit() # ✅ True
s = 'a'
s.isdigit() # ❌ False
s = '10'
s.isdigit() # ✅ True
lambda
serials.sort(key=lambda x: (len(x), d_sum(x), x))
길이, 합, 사전
순서대로 반영하여 정렬
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] #1755 숫자놀이 (python) (0) | 2025.04.16 |
---|---|
[백준] #1251 단어 나누기 (python) (0) | 2025.04.16 |
[백준] #1991 트리 순회 (python) (0) | 2025.04.08 |
[백준] #11660 구간 합 구하기5 (python) (0) | 2025.04.08 |
[백준] #9465 스티커 (python) (0) | 2025.04.08 |