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 |
Tags
- dacon
- 자연어처리
- 우분투
- Git
- ChatGPT
- SW Expert Academy
- 금융문자분석경진대회
- 프로그래머스 파이썬
- hackerrank
- 편스토랑
- Baekjoon
- 코로나19
- PYTHON
- Real or Not? NLP with Disaster Tweets
- 편스토랑 우승상품
- 파이썬
- gs25
- 더현대서울 맛집
- 맥북
- 프로그래머스
- Docker
- programmers
- Kaggle
- leetcode
- 백준
- 캐치카페
- 데이콘
- AI 경진대회
- github
- ubuntu
Archives
- Today
- Total
솜씨좋은장씨
[BaekJoon] 1431번 : 시리얼 번호 (Python) 본문
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 시리얼 번호 입니다.
1431번: 시리얼 번호
첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어
www.acmicpc.net
👨🏻💻 문제 풀이
시리얼 번호 목록이 주어지면
- 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)
GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07
1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.
github.com
'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 |