전체 글
- 카카오프렌즈 서포터즈 모집 2020.09.21
- [level1] 완주하지 못한 선수 2020.04.17
- [GROUP BY] 입양 시각 구하기(1) 2020.03.24
- [GROUP BY] 동명 동물 수 찾기 2020.03.22
카카오프렌즈 서포터즈 모집
[level1] 완주하지 못한 선수
문제
[문제 설명]
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
[제한 사항]
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
[입출력 예]
participant |
completion |
return |
["leo", "kiki", "eden"] |
["eden", "kiki"] |
"leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] |
["josipa", "filipa", "marina", "nikola"] |
"vinko" |
["mislav", "stanko", "mislav", "ana"] |
["stanko", "ana", "mislav"] |
"mislav" |
[입출력 예 설명]
예제 #1
leo는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #2
vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #3
mislav는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
풀이
1 2 3 4 5 6 7 | import collections def solution(participant, completion): answer = '' answer = collections.Counter(participant) - collections.Counter(completion) answer = list(answer.keys())[0] return answer | cs |
- participant 에서 나온 명단과 completion 에서 나온 명단을 비교한다.
- collection 모듈의 Counter 은 입력값에 대해 중복 여부를 체크하여 {"입력값" : 중복 횟수}를 리턴한다.
- collection 모듈의 Counter 은 각 요소끼리 뺄 수 있다.
- 뺀 후에 남은 값을 list 로 가져와 key 값을 출력한다. (이 때 0번째인 이유는 우선, completion의 길이가 participant 길이보다 1이 작기에 가능한 것이다.)
출처 : https://programmers.co.kr/learn/courses/30/lessons/42576
'코딩테스트 연습 > Python' 카테고리의 다른 글
[leve1] 자릿수 더하기 (0) | 2017.12.01 |
---|---|
[leve1] x 만큼 간격이 있는 n개의 숫자 (0) | 2017.11.30 |
[leve1] 딕셔너리 정렬 (0) | 2017.11.30 |
[GROUP BY] 입양 시각 구하기(1)
문제
ANIMAL_OUTS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 9시부터 19시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
예시
SQL문을 실행하면 다음과 같이 나와야 합니다.
HOURS | COUNT |
9 | 1 |
10 | 2 |
11 | 13 |
12 | 10 |
13 | 14 |
14 | 9 |
15 | 7 |
16 | 10 |
17 | 12 |
18 | 16 |
19 | 2 |
풀이
1 2 3 4 | SELECT HOUR(DATETIME) HOURS, COUNT(DATETIME) COUNT FROM ANIMAL_OUTS GROUP BY HOURS HAVING HOURS > 8 and HOURS < 20 ORDER BY HOURS | cs |
- HOUR 함수는 %Y-%m-%d %H:%M:%S 형태의 시간에서 시간을 가져온다.
- GROUP BY 에서 조건문을 통해 문제에서 주어진 9시부터 19시 정보를 가져온다.
- SELECT 에서 HOUR(DATETIME) 정보를 HOURS로 테이블 명으로 칭함으로써 시간대 그룹으로 묶고 시간 조건을 설정한다.
'코딩테스트 연습 > SQL' 카테고리의 다른 글
[GROUP BY] 동명 동물 수 찾기 (0) | 2020.03.22 |
---|---|
[GROUP BY] 고양이와 개는 몇 마리 있을까 (0) | 2020.03.22 |
[MAX, MIN, SUM] 중복 제거하기 (0) | 2020.03.21 |
[MAX, MIN, SUM] 동물 수 구하기 (0) | 2020.03.21 |
[MAX, MIN, SUM] 최솟값 구하기 (0) | 2020.03.21 |
[GROUP BY] 동명 동물 수 찾기
문제
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
예시
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
A396810 | Dog | 2016-08-22 16:13:00 | Injured | Raven | Spayed Female |
A377750 | Dog | 2017-10-25 17:17:00 | Normal | Lucy | Spayed Female |
A355688 | Dog | 2014-01-26 13:48:00 | Normal | Shadow | Neutered Male |
A399421 | Dog | 2015-08-25 14:08:00 | Normal | Lucy | Spayed Female |
A400680 | Dog | 2017-06-17 13:29:00 | Normal | Lucy | Spayed Female |
A410668 | Cat | 2015-11-19 13:41:00 | Normal | Raven | Spayed Female |
- Raven 이름은 2번 쓰였습니다.
- Lucy 이름은 3번 쓰였습니다.
- Shadow 이름은 1번 쓰였습니다.
NAME |
COUNT |
Lucy |
3 |
Raven |
2 |
풀이
1 2 3 4 | SELECT NAME, COUNT(NAME) count FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME) > 1 ORDER BY NAME | cs |
- GROUP BY [컬럼명] HAVING [조건] : 조건에 해당하는 컬럼들을 그룹화한다.
- HAVING 은 집계함수를 가지고 조건을 비교 시 사용한다. (WHERE 절은 집계함수 사용 불가)
- COUNT(*) 은 해당 문제에서 불가 : * 은 NULL 값도 포함하기에 조건 비교를 할 수 없다.
출처 : https://programmers.co.kr/learn/courses/30/lessons/59041
'코딩테스트 연습 > SQL' 카테고리의 다른 글
[GROUP BY] 입양 시각 구하기(1) (0) | 2020.03.24 |
---|---|
[GROUP BY] 고양이와 개는 몇 마리 있을까 (0) | 2020.03.22 |
[MAX, MIN, SUM] 중복 제거하기 (0) | 2020.03.21 |
[MAX, MIN, SUM] 동물 수 구하기 (0) | 2020.03.21 |
[MAX, MIN, SUM] 최솟값 구하기 (0) | 2020.03.21 |