문제

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.
홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다.

첫 번째(3번), 두 번째(1번) 폰켓몬을 선택
첫 번째(3번), 세 번째(2번) 폰켓몬을 선택
첫 번째(3번), 네 번째(3번) 폰켓몬을 선택
두 번째(1번), 세 번째(2번) 폰켓몬을 선택
두 번째(1번), 네 번째(3번) 폰켓몬을 선택
세 번째(2번), 네 번째(3번) 폰켓몬을 선택


이때, 첫 번째(3번) 폰켓몬과 네 번째(3번) 폰켓몬을 선택하는 방법은 한 종류(3번 폰켓몬 두 마리)의 폰켓몬만 가질 수 있지만, 다른 방법들은 모두 두 종류의 폰켓몬을 가질 수 있습니다. 따라서 위 예시에서 가질 수 있는 폰켓몬 종류 수의 최댓값은 2가 됩니다.
당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.

 

풀이

def solution(nums):
    mon = int(len(nums)) # 원래 배열의 길이
    nums = set(nums) # 중복제거
    if mon/2 > len(nums): #원래 배열의길이/2 > 중복제거한 배열
        return len(nums)
    else:
        return mon/2

문제

한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.

 

풀이

n = int(input())
rooms = []
for _ in range(n):
    start, end = map(int, input().split())
    rooms.append((start, end))
    
rooms.sort(key = lambda x : (x[1], x[0]))
time = 0
cnt = 0
for room in rooms:
    if time <= room[0]:
        time = room[1]
        cnt+=1
print(cnt)

문제

준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.
동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.

 

풀이

n, k = map(int, input().split())
coins = []
for _ in range(n):
    coins.append(int(input()))
coins.sort(reverse = True) #오름차순 정렬

add = 0
for coin in coins:
    add += k//coin #몫 저장
    k %= coin #나머지값 저장
print(add)

문제

카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다.
한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다.
김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다.
이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다.
N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하시오.

 

 

  • combinations 라이브러리 활용

 

풀이

from itertools import combinations

n, m = map(int, input().split())
cards = list(map(int, input().split()))

card_sum = [sum(card) for card in combinations(cards, 3) if sum(card) <= m]
print(max(card_sum))

문제

2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에 N명의 학생들이 응시했다.
이들 중 점수가 가장 높은 k명은 상을 받을 것이다. 이 때, 상을 받는 커트라인이 몇 점인지 구하라.
커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.

 

풀이

n, k = map(int, input().split())
score = list(map(int, input().split()))
score.sort(reverse = True)
print(score[k-1])

'Data > IT' 카테고리의 다른 글

[Python/백준] 11047번 동전 0  (0) 2023.10.23
[Python/백준] 2798번 블랙잭  (0) 2023.10.23
[Python/백준] 1427번 소트인사이드  (0) 2023.10.23
[Python/백준] 2750번 수 정렬하기  (0) 2023.10.22
[Python/백준] 11720번 문자열  (0) 2023.10.22

문제

배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.

 

풀이

n = list(map(int, str(input())))
n.sort(reverse = True)
for i in n:
    print(i, end='')

'Data > IT' 카테고리의 다른 글

[Python/백준] 2798번 블랙잭  (0) 2023.10.23
[Python/백준] 25305번 커트라인  (0) 2023.10.23
[Python/백준] 2750번 수 정렬하기  (0) 2023.10.22
[Python/백준] 11720번 문자열  (0) 2023.10.22
[Python/백준] 1181번 단어정렬  (0) 2023.10.22

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

 

풀이

data.sort() 해도 되는데 sorted(key=lambda) 익숙해지고 싶어서 활용했다.

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

 

 

  • 리스트로 변환 후 sum함수 활용

 

풀이

문제

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

단, 중복된 단어는 하나만 남기고 제거해야 한다.

 

 

  • set()을 활용해서 중복 제거해줘야 함
  • sorted(key = lambda : x) 활용해서 내가 원하는 대로 정렬해줄 것

 

 

풀이

문제

Query the two cities in STATION with the shortest and longest CITY names, as well as their respective lengths (i.e.: number of characters in the name). If there is more than one smallest or largest city, choose the one that comes first when ordered alphabetically.

When ordered alphabetically, the CITY names are listed as ABC, DEF, PQRS, and WXY, with lengths 3, 3, 4 and 3. The longest name is PQRS, but there are 3 options for shortest named city. Choose ABC, because it comes first alphabetically.

 

 

 

city 이름 길이가 가장 짧은 도시, 가장 긴 도시를 출력하는 문제

limit을 사용하면 쉽게 구할 수 있다.

 

 

풀이 코드

order by를 사용해서 도시 이름 길이에 따라 오름차순, 내림차순으로 각각 나열한 후 limit 1을 걸어주면 가장 짧은 길이의 이름을 가진 도시와 가장 긴 길이의 이름을 가진 도시가 출력된다.

+ Recent posts