728x90

문제

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

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

입력

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

출력

조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.

코드

import sys
n = int(sys.stdin.readline())
arr = []
for i in range(n):
    arr.append(sys.stdin.readline().strip())

#중복 제거 후 sort
set_arr = list(set(arr))
set_arr.sort()
set_arr.sort(key = len)
for i in set_arr:
    print(i)

풀이

문제 정렬 조건이 다음과 같다.

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

그렇다면, 정렬 순서가 하위 조건인 사전 순으로 정렬을 하고 상위 조건인 길이가 짧은 것부터 정렬을 해야한다.

하위 조건 먼저!! 

 

* 문자열 길이로 sort 하는 경우

arr.sort(key = len)

 

728x90

문제

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

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

코드

import sys
n = int(input())
cnt = [0]*(10000+1)

for i in range(n):
    cnt[int(sys.stdin.readline())] +=1
for i in range(len(cnt)):
    for j in range(cnt[i]):
        print(i)

풀이

정렬 라이브러리를 사용하면 메모리 초과가 된다.

입력 데이터의 크기가 한정되어 있고, 데이터가 많이 중복되는 걸 봐서 계수정렬을 사용해 구현했다.

 

처음에, arr 배열에 append로 입력을 받고 cnt에 저장하는 방식으로 구현했는데 또 메모리 초과가 났다.

그래서

1) arr배열을 입력을 받을 때 바로 cnt의 index에 +1을 해주는 방식으로 구현했다.

2) cnt의 크기를 10000에서 +1 로 정해줬다.

 

 

728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/62284

 

코딩테스트 연습 - 우유와 요거트가 담긴 장바구니

CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 아이디, 장바구니의 아이디, 상품 종류, 가

programmers.co.kr

 

1) join 사용

SELECT A.CART_ID 
FROM CART_PRODUCTS AS A
INNER JOIN CART_PRODUCTS AS B
ON A.CART_ID = B.CART_ID
WHERE A.NAME = 'Milk' AND B.NAME = 'Yogurt'
ORDER BY A.ID;

2) 서브쿼리

SELECT CART_ID
FROM CART_PRODUCTS
WHERE CART_ID IN (
    SELECT CART_ID
    FROM CART_PRODUCTS
    WHERE NAME = 'Milk'
)
AND NAME = 'Yogurt'
ORDER BY ID;

3) 서브쿼리 2

SELECT DISTINCT(CART_ID) AS CART_ID
FROM CART_PRODUCTS
WHERE CART_ID IN (
    SELECT CART_ID
    FROM CART_PRODUCTS
    WHERE NAME = 'Milk'
)
AND CART_ID IN (
    SELECT CART_ID
    FROM CART_PRODUCTS
    WHERE NAME = 'Yogurt'
)
ORDER BY ID;
728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/77487

 

코딩테스트 연습 - 헤비 유저가 소유한 장소

PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를

programmers.co.kr

 

1. 서브쿼리 사용

SELECT *
FROM PLACES
WHERE HOST_ID IN (
    SELECT HOST_ID
    FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(HOST_ID)>=2
)
ORDER BY ID;

2. INNER JOIN 사용

SELECT ID, NAME, A.HOST_ID
FROM PLACES A
INNER JOIN(
    SELECT HOST_ID, COUNT(HOST_ID)
    FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(HOST_ID)>=2
)AS B 
ON A.HOST_ID = B.HOST_ID
ORDER BY A.ID;
728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/59045

 

코딩테스트 연습 - 보호소에서 중성화한 동물

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

1. join 사용

SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_OUTS AS A
LEFT OUTER JOIN ANIMAL_INS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.SEX_UPON_INTAKE LIKE 'Intact%'
AND A.SEX_UPON_OUTCOME NOT LIKE 'Intact%'
ORDER BY A.ANIMAL_ID;

2. 서브쿼리 사용

SELECT ANIMAL_ID, ANIMAL_TYPE, NAME
FROM ANIMAL_OUTS
WHERE ANIMAL_ID IN (
    SELECT ANIMAL_ID
    FROM ANIMAL_INS
    WHERE SEX_UPON_INTAKE LIKE 'Intact%'
)
AND SEX_UPON_OUTCOME NOT LIKE 'Intact%'
ORDER BY ANIMAL_ID;
728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/59044

 

코딩테스트 연습 - 오랜 기간 보호한 동물(1)

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

1. join 사용

SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS AS A
LEFT OUTER JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.DATETIME
LIMIT 3;

2. 서브쿼리 사용

SELECT NAME, DATETIME
FROM ANIMAL_INS
WHERE ANIMAL_ID NOT IN (
    SELECT ANIMAL_ID
    FROM ANIMAL_OUTS
)
ORDER BY DATETIME
LIMIT 3;
728x90

출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/59043

 

코딩테스트 연습 - 있었는데요 없었습니다

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS AS A
INNER JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.DATETIME>B.DATETIME
ORDER BY A.DATETIME;

 

+ Recent posts