Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 캐치카페
- leetcode
- PYTHON
- hackerrank
- 프로그래머스 파이썬
- 우분투
- ChatGPT
- 데이콘
- 코로나19
- Docker
- 자연어처리
- 맥북
- 편스토랑 우승상품
- Kaggle
- SW Expert Academy
- dacon
- 금융문자분석경진대회
- ubuntu
- 편스토랑
- 파이썬
- programmers
- 프로그래머스
- Real or Not? NLP with Disaster Tweets
- 백준
- AI 경진대회
- Baekjoon
- gs25
- github
- Git
- 더현대서울 맛집
Archives
- Today
- Total
솜씨좋은장씨
[BaekJoon] 1431번 : 시리얼 번호 (Python) 본문
728x90
반응형
코딩 1일 1문제! 오늘의 문제는 백준의 시리얼 번호 입니다.
👨🏻💻 문제 풀이
시리얼 번호 목록이 주어지면
- A와 B의 길이가 다르면, 짧은 것이 먼저 온다.
- 만약 서로 길이가 같다면, A의 모든 자리수의 합과 B의 모든 자리수의 합을 비교해서 작은 합을 가지는 것이 먼저온다. (숫자인 것만 더한다)
- 만약 1,2번 둘 조건으로도 비교할 수 없으면, 사전순으로 비교한다. 숫자가 알파벳보다 사전순으로 작다.
위의 규칙에 따라 정렬하고 정렬한 대로 출력하는게 이 문제 입니다.
저는 각각의 시리얼 번호에 정렬 기준이 되는 값을 만들어 넣어두고 해당 값들로 정렬하였습니다.
먼저 1번의 길이는 len으로 구했습니다.
len(serial_num)
2번의 모든 자리수의 합은 정규식을 활용하였습니다.
import re
def get_nums_sum(serial_num):
num_string = map(int, list(re.sub(r'[A-Za-z]', '', serial_num)))
return sum(num_string)
이렇게 만든 값들을
serial_num_infos = [(serial_num, len(serial_num), get_nums_sum(serial_num)) for serial_num in serial_num_infos]
sorted_result = sorted(serial_num_infos, key=lambda x: (x[1], x[2], x[0]))
정렬하는데 활용했습니다.
전체 코드는 아래를 참고해주세요.
👨🏻💻 코드 ( Solution )
import re
def get_nums_sum(serial_num):
num_string = map(int, list(re.sub(r'[A-Za-z]', '', serial_num)))
return sum(num_string)
def serial_number(serial_num_infos):
serial_num_infos = [(serial_num, len(serial_num), get_nums_sum(serial_num)) for serial_num in serial_num_infos]
sorted_result = sorted(serial_num_infos, key=lambda x: (x[1], x[2], x[0]))
return [result[0] for result in sorted_result]
if __name__ == "__main__":
serial_num_infos = []
for _ in range(int(input())):
serial_num = input()
serial_num_infos.append(serial_num)
answer_result = serial_number(serial_num_infos)
for answer in answer_result:
print(answer)
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[BaekJoon] 2338번 : 긴자리 계산 (Python) (0) | 2022.03.04 |
---|---|
[BaekJoon] 2231번 : 분해합 (Python) (0) | 2022.03.03 |
[Programmers] 탐욕법(Greedy) - 단속카메라 (Python) (0) | 2022.03.01 |
[BaekJoon] 2525번 : 오븐 시계 (Python) (0) | 2022.02.28 |
[BaekJoon] 4673번 : 셀프 넘버 (Python) (0) | 2022.02.27 |
Comments