오늘의 학습 키워드
정렬, 문자열
오늘의 회고
🌱 오늘의 문제
https://www.acmicpc.net/problem/1431
오늘의 문제는 문자열을 여러 개의 조건으로 정렬하는 문제이다.
입력으로 50 이하의 정수 n이 주어지고, 이어서 n개의 문자열이 주어진다.
(1) 문자열의 길이(오름차순), (2) 문자열에 포함된 숫자의 합(오름차순), (3) 문자의 사전순 정렬(오름차순)을 기준으로 정렬한다.
🌱 나의 시도
파이썬에서 제공하는 sorted 함수를 활용하였다.
이미 최적화 되어 있기에 효율성에서도 적합하고, key 파라미터에 lambda 함수를 이용하여 여러 조건에 대한 정렬이 가능하기 때문이다.
정렬 기준 중 2번 조건에 대해 별도의 함수를 구현해주었고, 이를 lambda 함수에 아래와 같이 추가해주었다.
def serial_sum(serial):
answer = 0
for c in serial:
if '1' <= c <= '9':
num = int(c)
answer += num
return answer
n = int(input())
serials = [input() for _ in range(n)]
serials = sorted(serials, key=lambda x: (len(x), serial_sum(x), x))
for serial in serials:
print(serial)
🌱 새롭게 알게 된 점
다른 사람들의 코드를 살펴보던 중 문자열에서 숫자 값을 추출할 때 re 라이브러리와 정규식을 이용한 방법을 추가로 알게 되었다.
import re
x = "ABCD1234"
re.findall("\d+", x)
findall() 함수를 통해 문자열에 "\d+" 라는 문법을 적용해주면 숫자값만 추출하는 것을 확인할 수 있었다.
이 문제는 숫자만 추출했지만 다른 문제에서는 숫자, 소문자, 일부 특수문자 등 여러 조건의 문자열을 추출하는 문제들이 있었다.
이러한 문제들에 잘 적용하기 위해 정규식도 잘 이해해두어야겠다.
오늘의 후기
문자열이나 정렬 문제는 알고리즘이 어렵진 않은데, 자주 풀어보지 않아서 그런지 함수가 익숙치 않은 것 같다.
그래서 풀고 보면 함수 이름이 낯설지 않은데 바로 떠오르지 않는다는 문제가 있다.
코테 때 잘 활용하려면 더 자주 풀어보고, 블로그에 많이 기록해두어야겠다.
'Daily > Coding Test' 카테고리의 다른 글
[백준][그리디] 회의실 배정 (0) | 2025.04.22 |
---|---|
[백준][그리디] 잃어버린 괄호 (0) | 2025.04.22 |
[백준][DFS/BFS] DFS와 BFS (+ 재귀 함수가 아닌 반복문을 이용한 DFS, 우선순위 큐를 이용한 인접 리스트) (0) | 2025.04.16 |
[백준][문자열] 한국이 그리울 땐 서버에 접속하지 (0) | 2025.04.11 |
[백준][스택] 쇠막대기 (1) | 2025.04.11 |