본문 바로가기
오답노트/PYTHON_1차

[LV 2.] 문제 31~40.

by 쿙이콩 2025. 6. 23.
728x90

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

문제 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주

제한 str은 길이 1 이상인 문자열

 

34-1. ''.join() , sorted( , ) 내장함수 활용

def solution(s):
    return ''.join(sorted(s, reverse=True))

 

34-2. 리스트.sort() 활용

def solution(s):
    arr = list(s)
    arr.sort(reverse=True)
    return ''.join(arr)

 

34-3. 대소문자를 따로 정렬한 뒤 합치고 싶다면 (그냥 참고)

def solution(s):
    lower = sorted([c for c in s if c.islower()], reverse=True)
    upper = sorted([c for c in s if c.isupper()], reverse=True)
    return ''.join(lower + upper)
함수 예시 설명
. join () .sorted( ) ''.join(sorted(s, reverse=True)) - 문자열을 내림차순 정렬
- 대소문자 구분 없이 ASCII 값 기준 정렬(소문자 우선 자동 적용)
list() sort() join() 리스트명.sort(reverse=True)
''.join(리스트명)
- 문자열을 리스트 변환 후 내림차순
- 원본 리스트를 직접 수정하는 방식
isupper(),
islower(),
sorted()
위의 문제풀이 참조 - 소문자와 대문자 분리해 각각 내림차순 정렬(그냥 참고)

 

35. 부족한 금액 계산하기

 

문제 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return

제한 

놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수

처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수

놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수

def solution(price, money, count):
    new_price = 0
    for i in range(count+1):
        new_price += (price * i)
    if money < new_price:
        return abs(money - new_price)
    else:
        return 0

오답

1) new_price = 0의 위치에 따라 크게 달라지는 new_price (아래 표 참고)

2) if 와 else 문 조건은 for에 맞춰서(for문 밖에서) 수행

3) new_price += (price * i) 가 맞는데 자신 없었음

변수 선언의 중요성
def solution(price, money, count):
    for i in range(count+1):
        new_price = 0
        new_price += (price * i)
    print(new_price)
def solution(price, money, count):
    new_price = 0
    for i in range(count+1):
        new_price += (price * i)
    print(new_price)
new_price를 반복문 안에서 매번 0으로 초기화함
매 반복마다 new_price는 0이 되고, 거기에 price * i 만 더해짐
그래서 print(new_price) >>> 12가 나옴
new_price를 반복문 밖에서 매번 0으로 초기화함
반복문이 시작되면 i가 0부터 count까지 변하면서 price * i 값을 계속해서 new_price에 누적(+=)
그래서 print(new_price) >>> 12가 나옴

4) 아래는 또다른 풀이 

 

def solution(price, money, count):
    total_cost = price * count * (count + 1) // 2
    shortage = total_cost - money
    return shortage if shortage > 0 else 0

★ 중요: 전체 이용료의 합을 구하는 방법

1) 각 회차별 이용료

-- 1번째 탈 때 = price * 1 

-- 2번째 탈 때 = price * 2 

-- 3번째 탈 때 = price * 3 

-- count번째 탈 때 = price * count

2) 전체 이용료의 합

-- 전체 이용료 = price * 1 + price * 2 = price * 3 + ... + price * count = price * (1 + 2 + ... + count)

3) 1부터 count까지의 합 공식 = 1부터 n까지의 합 공식 =

4) 파이썬 코드로는 price * count * (count + 1) // 2

-- / 연산자는 실수를 반환 , // 연산자는 정수(몫)를 반환하니까 // 를 씀

total_cost = price * count * (count + 1) // 2 전체 이용료의 합 구하기
shortage = total_cost - money 전체 이용료와 내가 가진 돈 차이 구하기
return shortage if shortage > 0 else 0 차이가 있다면 반환, 없다면 0

 

def solution(price, money, count):
    total_cost = 0
    for i in range(1, count + 1):
        total_cost += price * i 
    shortage = total_cost - money
    return shortage if shortage > 0 else 0
    total_cost = 0  전체 이용료의 합을 구할 total_cost = 0 설정
    for i in range(1, count + 1): count 안의 숫자 i 반복 설정
        total_cost += price * i  ★ total_cost += price * i  맞음
    shortage = total_cost - money 전체 이용료와 내가 가진 돈 차이 구하기
    return shortage if shortage > 0 else 0 차이가 있다면 반환, 없다면 0

 

728x90

'오답노트 > PYTHON_1차' 카테고리의 다른 글

[LV 1.] 문제 21~30.  (0) 2025.06.03
[LV 1.] 문제 11~20.  (0) 2025.06.03
[LV 1.] 문제 1~10.  (0) 2025.06.01