문제

준규가 가지고 있는 동전은 총 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) 활용해서 내가 원하는 대로 정렬해줄 것

 

 

풀이

작년 인턴을 한 후로 SQL을 완전히 까먹었다.

데이터 분야에서 SQL 능력은 기본 중의 기본이기 때문에..

복습 및 실력 향상을 위해 오늘부터 SQL 코딩 테스트 문제 풀이를 시작했다.

기본적인 것부터 시작해서 난이도 있는 문제 풀이까지 해야겠다.

파이팅..

 

 

 

01. 조건에 맞는 도서와 저자 리스트 출력하기

- BOOK, AUTHOR 두 개의 테이블 존재

- 경제 카테고리에 속하는 도서들의 도서 ID, 저자명, 출판일 리스트를 출력하는 SQL문 작성

- 출판일 기준으로 오름차순 정렬

- 출판일의 데이트 포맷이 예시와 동일해야 정답처리(ex. 2023-01-28)

 

 

 

풀이 코드

JOIN문을 활용하면 풀 수 있는 쉬운 문제이다.

JOIN은 기본적으로 두 테이블 간의 공통 컬럼을 KEY로 연결하여 사용한다.

이 문제에서는 AUTHOR_ID가 공통적으로 두 테이블에 존재하기 때문에 이를 사용해서 문제를 풀었다.

 

 

 

 

02. 없어진 기록 찾기

- ANIMAL_INS, ANIMAL_OUTS 두 개의 테이블 존재

천재지변으로 인해 일부 데이터가 유실

- 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문 작성

 

* ANIMAL_INS : 보호소에 들어온 동물 리스트 모아놓은 테이블

* ANIMAL_OUTS : 입양 보낸 동물 리스트 모아놓은 테이블

* ANIMAL_ID : 외래키

 

 

 

풀이 코드

문제 내용만 제대로 이해하면 쉬운 문제이다.

ANIMAL_OUTS에는 기록이 있는데, ANIMAL_INS에는 기록이 없는 동물을 찾는 문제로, 두 테이블을 JOIN 해준 후 WHERE절에서 ANIMAL_INS의 ANIMAL_ID(외래키) IS NULL 조건절을 추가해주면 된다.

 

 

* 참고 ! 실행결과

 

 

 

 

03. 그룹별 조건에 맞는 식당 목록 출력하기

- MEMBER_PROFILE, REST_REVIEW 두 테이블 존재

- MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문 작성

- 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성

- 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬

 

 

* 서브쿼리 필요

* GROUP BY, ORDER BY, LIMIT 구문 필요

 

이 문제는...약간 헤맸다

머리가 안 돌아가서.....

 

 

 

풀이 코드

 

JOIN을 통해 두 테이블을 연결해준 후, WHERE절 안에 서브쿼리를 작성해서 문제를 풀었다.

리뷰를 가장 많이 쓴 회원의 리뷰들을 보여줘야 하므로, MEMBER_ID를 GROUP BY로 묶은 후 ORDER BY 구문을 활용하여 COUNT함수를 써서 내림차 정렬을 했다.

LIMIT 1이라는 조건을 주어 내림차 정렬에 따른 가장 많은 리뷰들을 쓴 회원의 아이디가 선택되게 했다.

 

 

 

* 참고 ! 실행결과

 

프로그래머스 SQL 코딩테스트 연습에 올라온 예제 문제.

Group by를 사용하는 예제이다.

 

1. 동명 동물 수 찾기

동물 보호소에 들어온 동물의 정보를 담은 ANIMAL_INS 테이블이 있는데,

이때 동물 보호소에 들어온 동물 이름 중 두 번 이상(i > 1) 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해야 하는 문제이다.

먼저 SELECT문을 통해 NAME과 COUNT 함수를 테이블로부터 함께 조회해주고, group by로 이름끼리 묶어준다.

문제에서 같은 이름이 두 번 이상 쓰인 경우 카운터하라고 했기 때문에 HAVING문을 활용해서 조건을 넣어준다.

그 다음 이름순으로 정렬해주면 끝!

 

 

2. 입양 시각 구하기 (1)

보호소에서 입양 보낸 횟수를 알아보기 위해 오전 9시부터 오후 7시 59분까지의 입양 횟수를 카운터해야 하는 문제이다.

시간대별로 몇 건이 발생했는지를 나타내야 한다.

 

문제 풀이에서 SUBSTR함수를 사용하여 필요한 HOUR만 잘라서 사용했는데, SQL은 HOUR 함수가 있기 때문에 이 함수를 사용하는 게 가장 간결하고 베스트이다.

그냥 이런 방법도 있다 하는 마음으로 사용했다.

HAVING문을 활용하여 조건에 명시된 시간대를 설정해주고, GROUP BY, ORDER BY를 작성해주면 끝!

 

 

+ Recent posts