내일배움캠프

[본캠프] 데이터기반 QA/QC 부트캠프 21일차

min0jun 2026. 6. 10. 21:11

1. 오늘 학습 목표


2. 오늘 학습 한 내용

오늘의 코드카타

오늘 문제에서는 문자열을 정렬한 뒤 다시 하나의 문자열로 합치는 방법과,

일정한 규칙으로 증가하는 금액의 총합을 계산하는 방법을 연습했다.

문제에 숨어 있는 규칙을 찾고, 파이썬의 기본 함수로 간단하게 표현하는 것이 핵심이다.


1. 문자열 내림차순으로 배치하기

문제 설명

문자열 s에 포함된 문자를 큰 문자부터 작은 문자 순서로 정렬해 새로운 문자열을 반환하는 문제다.

문자열은 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 취급한다.

예를 들어 "Zbcdefg"를 내림차순으로 정렬하면 "gfedcbZ"가 된다.

입출력 예

s = "Zbcdefg"
return =
"gfedcbZ"

문제 접근

문자열도 sorted()를 사용하면 문자 단위로 정렬할 수 있다.

기본값은 오름차순이므로 큰 문자부터 정렬하려면 reverse=True를 사용한다.

다만 sorted()의 결과는 문자열이 아니라 문자들이 담긴 리스트로 반환된다.

따라서 ''.join()을 이용해 정렬된 문자들을 다시 하나의 문자열로 합치면 된다.

sorted()로 문자를 정렬하고, join()으로 다시 문자열을 만드는 것이 핵심이다.

풀이 코드

def solution(s):
    answer = ''

    sorted_str = sorted(s, reverse=True)
    answer = ''.join(sorted_str)

    return answer


# solution("Zbcdefg")

코드 설명

sorted(s, reverse=True)

문자열 s의 각 문자를 내림차순으로 정렬한다.

정렬 결과는 다음과 같은 리스트 형태로 반환된다.

['g', 'f', 'e', 'd', 'c', 'b', 'Z']

''.join(sorted_str)

 

리스트 안의 문자들을 빈칸 없이 이어 붙여 하나의 문자열로 만든다.

 

결과는 다음과 같다.

"gfedcbZ"

풀이 정리

처음에는 문자열 자체에 정렬 기능을 바로 적용하면 결과도 문자열로 나올 것 같지만, sorted()는 리스트를 반환한다.

따라서 정렬한 뒤 join()을 사용해 다시 문자열로 변환하는 과정이 필요하다.

이 문제를 통해 sorted(), reverse=True, join()을 함께 사용하는 방법을 연습할 수 있다.


2. 부족한 금액 계산하기

문제 설명

놀이기구의 원래 이용료가 price원이고, N번째 이용할 때는 원래 이용료의 N배를 지불해야 한다.

예를 들어 이용료가 3원이라면 다음과 같이 금액이 증가한다.

1번째 이용: 3원
2번째 이용: 6원
3번째 이용: 9원
4번째 이용: 12원

놀이기구를 count번 이용할 때 필요한 총금액을 계산하고, 현재 가진 금액 money보다 얼마가 부족한지 반환하는 문제다.

금액이 부족하지 않다면 0을 반환한다.

입출력 예

price = 3
money =
20
count =
4
result =
10

필요한 총금액은 다음과 같다.

3 + 6 + 9 + 12 = 30

현재 가진 금액이 20원이므로 부족한 금액은 다음과 같다.

30 - 20 = 10

문제 접근

놀이기구의 이용료는 이용 횟수에 따라 다음과 같이 증가한다.

price × 1
price × 2
price × 3

price × count

따라서 1부터 count까지의 합을 구한 뒤 price를 곱하면 총 이용 금액을 구할 수 있다.

range(1, count + 1)로 1부터 count까지의 숫자를 만들고, sum()으로 모두 더한다.

이후 총 이용 금액에서 현재 가진 금액을 빼면 부족한 금액이 나온다.

부족한 금액이 음수라면 이미 돈이 충분하다는 뜻이므로 0을 반환해야 한다.

풀이 코드

def solution(price, money, count):
    answer = 0

    total = price * sum(range(1, count + 1))

    answer = total - money

    if answer < 0:
        answer = 0

    return answer


# solution(3, 20, 4)

코드 설명

range(1, count + 1)

1부터 count까지의 숫자를 만든다.

sum(range(1, count + 1))

이용 횟수의 합을 계산한다.

count가 4라면 다음과 같이 계산된다.

1 + 2 + 3 + 4

price * sum(range(1, count + 1))

각 이용 횟수에 따른 요금을 모두 더한 총금액을 계산한다.

answer = total - money

필요한 총금액에서 현재 가진 금액을 빼 부족한 금액을 구한다.

if answer < 0:

계산 결과가 음수라면 현재 가진 금액이 충분하다는 뜻이다.

이 경우 문제 조건에 따라 0을 반환한다.

풀이 정리

처음에는 반복문으로 매번 이용 금액을 더하는 방법을 생각할 수 있다.

하지만 이용료가 price × 1, price × 2, price × 3처럼 일정한 규칙으로 증가하므로, 1부터 count까지의 합을 이용하면 더 간단하게 계산할 수 있다.

반복되는 계산의 규칙을 찾으면 반복문 없이도 sum()range()를 이용해 짧게 해결할 수 있다.


나의 간단 소감

- 오늘은 문자열 정렬 문제와 일정한 규칙으로 증가하는 금액을 계산하는 문제를 풀었다.

문자열 내림차순 정렬 문제는 sorted()를 사용하면 정렬 자체는 간단하지만, 결과가 문자열이 아닌 리스트로 나온다는 점이 중요하다. 처음에는 정렬만 하면 끝날 것 같지만, join()을 이용해 다시 문자열로 합치는 과정이 필요하다.

함수의 사용법뿐만 아니라, 함수가 어떤 자료형을 반환하는지도 함께 확인해야 한다는 생각이 든다.

부족한 금액 계산 문제는 처음에는 반복문으로 금액을 하나씩 더해야 하나 싶었지만, 이용료가 일정한 규칙으로 증가한다는 점을 이용하면 sum(range())로 간단하게 계산할 수 있다.

특히 계산 결과가 음수일 때 0으로 바꾸는 조건도 빠뜨리면 안 된다. 총금액을 계산하는 것뿐만 아니라, 문제에서 요구하는 예외 조건까지 확인해야 정확한 답을 만들 수 있다.

문제를 풀 때 바로 코드를 작성하기보다, 먼저 반복되는 규칙과 예외 조건을 찾는 것이 중요하다.

오늘 문제들도 코드 자체는 길지 않지만, sorted(), join(), sum(), range()처럼 자주 사용하는 기본 함수를 다시 연습할 수 있다. 아직 문제를 보자마자 가장 간단한 풀이가 바로 떠오르지는 않지만, 이전보다 문제에서 필요한 기능을 하나씩 나누어 생각하는 과정은 조금씩 익숙해진다.

앞으로도 문제의 규칙을 먼저 정리하고, 그 규칙을 가장 간단하게 표현할 수 있는 함수를 찾는 방식으로 계속 연습해야겠다.

 

+(프로젝트 이야기) 오늘은 쉽게 얘기하면 인사이트와 스토리 라인을 짜고 피피티를 만들었는데, 팀원 한분이 너무 좋은 인사이트를 내주셔서 오늘 기분이 너무 좋다. 산공과 쪽이라고 하시던데 역시 멋있다. 그렇게 해서 나온 인사이트로 스토리를 짜니 스토리도 탄탄해보였다.
이제 나만 잘하면 될 것 같다,,,,,