Instagram에서 이 게시물 보기

⠀ ♥함께하면 즐거운 카카오프렌즈의 소중한 서포터즈 모집♥ ⠀ ◈모집대상: ⠀ -누구보다 카카오프렌즈 제품을 사랑하고 관심이 많다면 OK -활동 기간 중성실하게 제품 리뷰해주실 분이면 OK -평소에 SNS 활동이 활발하고 적극적인분 THE love♥ ⠀ 🔹모집인원: 8명 ⠀ 🔸모집기간 : 2020년 9월 24일(목)까지 ⠀ 🔹발표일자: 2020년 9월 25일(금) 개별연락 ⠀ 🔸활동기간: 2020년 10월 - 12월 ⠀ 🔹활동내용 -제공받은 제품 (하반기 출시 예정 신상품 : 다이어리,캘린더,겨울용품 등 ) 리뷰 -제품 사용컷 , 메인컷, 컨셉컷 등 3장 이상의 사진이 포함된 게시글 월 5회 업로드 ⠀ 🔸신청방법 ① 아이콘스 인스타그램 팔로우 ② 서포터즈 모집 게시글 SNS에 공유하기(비공개 / 비활동 계정은 선정에서 제외) ③ 네이버 폼으로 작성하고 참여완료 댓글 달기 (http://naver.me/5xN2Ivxx) ⠀ ❗❗❗본인계정에 서포터즈 모집 게시글 공유+네이버폼신청해야 선정대상이됩니다❗❗❗

아이콘스(icons)(@icons_kakaofriends_licensee)님의 공유 게시물님,

문제


[문제 설명]


수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.


마라톤에 참여한 선수들의 이름이 담긴 배열 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

문제


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

10

11

13 

12

10 

13

14 

14

15

16

10 

17

12 

18

16 

19



풀이


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로 테이블 명으로 칭함으로써 시간대 그룹으로 묶고 시간 조건을 설정한다.


문제


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번 쓰였습니다.

따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

NAME 

COUNT 

Lucy

Raven



풀이


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

+ Recent posts