반응형

 

문제 설명

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

  1. 124 나라에는 자연수만 존재합니다.
  2. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

10진법       124 나라      10진법       124 나라

1 1 6 14
2 2 7 21
3 4 8 22
4 11 9 24
5 12 10 41

자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.

제한사항

  • n은 500,000,000이하의 자연수 입니다.

입출력 예

n              result

1 1
2 2
3 4
4 11

 

 

 

프로그래머스 LEVEL 2 문제 중에 10진수, 2진수 등

N진수에 관한 문제이다.

문제는 1,2,4 만으로 존재하는 3진수라고 생각하면 된다.

 

 

문제는 푸는 핵심은,

3으로 나눠서 0이 되는 부분에서는 몫의 -1을 취해주는 것이다.

 

정답 코드

def solution(n):
    answer = ''
    
    arr = [4,1,2]
    
    arr_str = ""
    i = 1
    
    while n:
        arr_str = str(arr[n%3]) + arr_str
        n = n//3 - (n%3 == 0)
           
    
        
    return arr_str

 

 

코딩테스트 대비 Python 강의

www.youtube.com/channel/UCYYao-BSPaetw7N2GFFJ-Yw?view_as=subscriber

 

Henry Joo

 

www.youtube.com

 

반응형
반응형

 

 

문제 설명

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다.

전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 전체 학생의 수는 2명 이상 30명 이하입니다.
  • 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
  • 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
  • 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.
  • 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.

입출력 예

nlostreservereturn

5 [2, 4] [1, 3, 5] 5
5 [2, 4] [3] 4
3 [3] [1] 2

입출력 예 설명

예제 #1
1번 학생이 2번 학생에게 체육복을 빌려주고, 3번 학생이나 5번 학생이 4번 학생에게 체육복을 빌려주면 학생 5명이 체육수업을 들을 수 있습니다.

예제 #2
3번 학생이 2번 학생이나 4번 학생에게 체육복을 빌려주면 학생 4명이 체육수업을 들을 수 있습니다.

출처

※ 공지 - 2019년 2월 18일 지문이 리뉴얼되었습니다.
※ 공지 - 2019년 2월 27일, 28일 테스트케이스가 추가되었습니다.

 

 

========================================================================================

 

해당 문제는 탐욕법 알고리즘을 사용하여 푸는 문제이다.

프로그래머스 LEVEL 1 수준의 문제이다.

 

 

탐욕법 알고리즘은 당시 상황에서 가장 최적이라고 생각되는 경우를 선택하는 알고리즘이다.

그렇기 때문에 (당시 상황이 아닌) 마지막 결과가 항상 최적의 해를 갖고 있지는 않다.

 

문제를 예를 들어 설명하면,

for문을 한번씩 돌면서 번호가 작은 순서로 탐색을 하게 되는데,

번호가 작은 (잃어버린) 학생에게 여벌 체육복을 선지급해준다.(일단 잃어버렸으니까 뒤에 사람 생각하지 않고 그냥 빌려주는 개념이다.)

 

이렇게 풀면 뒤에 사람이 필요한데 못받는 경우가 있을 수도 있지만,

 

이 문제에서는 가중치 값이 없고 그냥 몇명이 체육활동을 할 수 있는지만 확인하면 되기 때문에

앞 사람이 받든지, 뒷 사람이 받든지 결과값을 항상 동일하다.

 

def solution(n, lost, reserve):
    answer = n - len(lost)
    
    for i in lost:
        # 여벌옷 가져온 학생이 도난당했다면
        if i in reserve:
            answer += 1
            reserve.remove(i)
            continue
        
        # 앞 친구에게 먼저 빌리기
        if i-1 in reserve:
            answer += 1
            reserve.remove(i-1)
            continue
            
            
        # 도난당하지 '않은' 뒤 친구에게 빌리기
        if i+1 in reserve and i+1 not in lost:
            answer += 1
            reserve.remove(i+1)
            
    
    return answer

 

 

 

코딩테스트 대비 Python 동영상 강의

www.youtube.com/channel/UCYYao-BSPaetw7N2GFFJ-Yw?view_as=subscriber

 

Henry Joo

 

www.youtube.com

 

 

Java로도 풀어보았다.

그런데 자바는 Python 처럼 자유자재로 자료값들을 가져다가 사용할 수 없어서 조금 불편했다.

이 불편함에 익숙해지자!

 

정답 코드:

import java.util.*;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        int[] clothes = new int[n+2];
        for(int i=0; i<n+2; i++){
            clothes[i] = 1;
        }
        for(int i=0; i<lost.length; i++){
            clothes[lost[i]] -= 1;
        }
        for(int i=0; i<reserve.length; i++){
            clothes[reserve[i]] += 1;
        }
        
        for(int i=1; i<n+1; i++){
            if(clothes[i] == 1){
                answer += 1;
            }else if(clothes[i] == 2){
                if(clothes[i-1] == 0){
                    clothes[i-1] = 1;
                    clothes[i] = 1;
                    answer += 2;
                }else if(clothes[i+1] == 0){
                    clothes[i+1] = 1;
                    clothes[i] = 1;
                    answer += 1;
                }else{
                    clothes[i] = 1;
                    answer += 1;
                }
            }else{
                continue;
            }
        }
        
        System.out.println(Arrays.toString(clothes));
        return answer;
    }
}
반응형
반응형

 

이번주 토요일에 있는 LG U+ 코딩테스트 준비를 위해 SQL 문제를 풀어보았다.

 

사실 기본적인 SQL은 조금만 공부하면 그렇게 어렵지는 않다.

대신 프로그래머로서 서버와 DB를 연결해본 경험이라든지,

DB 테이블을 직접 설계하고 구축해본 경험이라든지 이런 부분이 중요하다.

 

일단 3일에 걸쳐서 조금씩 심심풀이 문제를 풀어보았다.

아래에 있는 문제들은 프로그래머스(programmers.co.kr/learn/challenges?selected_part_id=17047) 사이트에 있는 SQL 관련한 기본예제들이다.

 

프로그래머스에 있는 SQL 문제들을 풀고 느낀 점

 

알고리즘에 비해 막히거나 어려운 문제는 거의 없다.

SQL 입문자가 연습하기 좋은 환경이라고 생각한다.

 

 

(모든 레코드 조회하기) 1번 문제는 ANIMAL_INS 테이블의 모든 정보를 순차적으로 출력하는 문제이다.

! 역순으로 출력 이란 의미는 내림차순을 의미한다. ORDER BY ANIMAL_ID DESC 에서 DESC 명령어를 통해 적용 가능.

 

정답

-- 코드를 입력하세요
SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

 

(역순 정렬하기) 2번 문제는 ANIMAL_INS 테이블 정보 중 일부만 출력하는 문제이다. 마찬가지로 ORDER BY 를 사용하였다.

 

정답

-- 코드를 입력하세요
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC

 

(아픈 동물 찾기) 3번 문제는 ANIMAL_INS 테이블 정보 중 특정 조건을 만족하는 정보만 출력하는 문제이다. WHERE 절을 사용한다.

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = "Sick"

 

(어린 동물 찾기) 4번 문제는 ANIMAL_INS 테이블 정보 중 3번과 동일하게 특정 조건을 만족하는 정보만 출력하는 문제이다.

<> 명령어를 사용하였다. <=> 같지않다(!=) 의미

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION <> "Aged"

 

(동물의 아이디와 이름) 5번 문제는 일부 정보만 조회하는 문제이다. ORDER BY 를 사용하였다.

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

(여러 기준으로 정렬하기) 6번 문제는 일부 정보만 조회하되, ORDER BY를 여러 Coloumn에 적용하는 문제이다.

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC

 

(상위 n개 레코드) 7번 문제는 LIMIT 를 사용하여 TOP N 을 출력하는 문제이다.

 

정답

-- 코드를 입력하세요
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1

 

(최댓값 구하기) 8번 문제는 가장 최근에 들어온 동물의 정보를 조회하는 문제이다.

LIMIT 혹은 MAX를 사용하여 풀 수 있다.

 

정답

-- 코드를 입력하세요
SELECT MAX(DATETIME)
FROM ANIMAL_INS
ORDER BY DATETIME

or


-- 코드를 입력하세요
SELECT DATETIME
FROM ANIMAL_INS
ORDER BY DATETIME DESC
LIMIT 1

 

(최솟값 구하기) 9번 문제는 가장 빨리 들어온 동물의 정보이므로 8번과 반대되는 문제이다.

LIMIT 혹은 MIN을 사용하여 풀 수 있다.

 

정답

-- 코드를 입력하세요
SELECT MIN(DATETIME)
FROM ANIMAL_INS

 

(동물 수 구하기) 10번 문제는 ANIMAL_INS 테이블에 있는 모든 row들의 갯수를 세는 문제이다.

COUNT 함수를 사용하면 된다.

 

정답

-- 코드를 입력하세요
SELECT count(*)
FROM ANIMAL_INS

 

(중복 제거하기) 11번 문제는 ANIMAL_INS 테이블의 동물 이름을 중복, NULL 값 제외하여 갯수를 세는 문제이다.

NULL에 대한 조건을 걸어줄 때는 = 연산자가 아니라 IS NOT NULL / IS NULL 이렇게 걸어준다.

 

정답

-- 코드를 입력하세요
SELECT COUNT(DISTINCT(NAME))
FROM ANIMAL_INS
WHERE NAME IS NOT NULL

 

(고양이와 개는 몇 마리 있을까) 12번 문제는 ANIMAL_INS 테이블에서 개와 고양이의 갯수를 세는 문제이다.

IN 연산자는 해당 리스트에 속해있는지 아닌지를 묻는 경우 사용한다.

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_TYPE, count(*)
FROM ANIMAL_INS
WHERE ANIMAL_TYPE IN ('Cat','Dog')
GROUP BY ANIMAL_TYPE

 

(동명 동물 수 찾기) 13번 문제는 ANIMAL_INS 테이블에서 GROUP BY 절을 활용하여 공통된 이름의 개수를 세는 문제이다.

서브쿼리를 사용하여 문제를 해결한다.

AS 명령어를 통해 별칭을 주어 사용한다.

 

정답

-- 코드를 입력하세요
SELECT NAME, CNT as COUNT
FROM(SELECT NAME, COUNT(*) AS CNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME) A
WHERE CNT >= 2
ORDER BY NAME

 

(입양 시각 구하기 1) 14번 문제는 ANIMAL_OUTS에서 CASE WHEN 문을 통해 조건을 주고 정보를 출력해주는 문제이다.

(CASE WHEN 조건 1 THEN 조건 1 결과 WHEN 조건 2 THEN 조건 2 결과 ELSE 그 외 결과 END)

 

정답

-- 코드를 입력하세요
SELECT (CASE WHEN SUBSTR(DATETIME,12,2) < 10 THEN SUBSTR(DATETIME,13,1) ELSE SUBSTR(DATETIME,12,2) END) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE SUBSTR(DATETIME,12,2) > 8 AND SUBSTR(DATETIME,12,2) < 20
GROUP BY SUBSTR(DATETIME,12,2)
ORDER BY SUBSTR(DATETIME,12,2)

 

(입양 시각 구하기 2) 15번 문제는 ANIMAL_OUTS에 있지 않은 시간 데이터를 임의로 만들어서 OUTER JOIN 해주어야 하는 문제이다.

set @a := -1  <=> a에 -1을 대입한다.

SELECT @a:=@a+1 자기 자신에 1을 더해주면 24 가 도달할 때까지 반복한다.

두 테이블을 OUTER JOIN 해준다.

 

정답

-- 코드를 입력하세요
set @a := -1;
SELECT HOUR, IFNULL(COUNT,0)
FROM(SELECT HOUR(DATETIME) AS HOUR1, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)) real_table RIGHT JOIN (SELECT *
FROM (SELECT @a:=@a+1 as HOUR FROM ANIMAL_OUTS) A
WHERE A.HOUR >= 0 AND A.HOUR < 24) total_table ON real_table.HOUR1 = total_table.HOUR

 

(이름이 없는 동물의 아이디) 16번 문제는 ANIMAL_INS에서 이름이 없는 정보를 조회하는 WHERE 절을 사용하는 간단한 쿼리이다.

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL

 

 

(이름이 있는 동물의 아이디) 17번 문제는 ANIMAL_INS에서 이름이 있는 정보를 조회하는 WHERE 절을 사용하는 간단한 쿼리이다.

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID

 

(Null 처리하기) 18번 문제는 ANIMAL_INS에서 이름이 없는 경우 No name이라고 출력해주는 Null 처리에 관한 문제이다.

IFNULL을 사용한다.

IFNULL(컬럼1,컬럼1이 NULL 값이면 보내줄 값)

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_TYPE, IFNULL(NAME,'No name'), SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

 

(없어진 기록 찾기) 19번 문제는 ANIMAL_OUTS에는 있는데 ANIMAL_INS에는 없는 정보를 서브쿼리를 사용하여 푸는 문제이다.

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
FROM ANIMAL_OUTS
WHERE ANIMAL_ID NOT IN (SELECT ANIMAL_ID FROM ANIMAL_INS)
ORDER BY ANIMAL_ID

 

(있었는데요 없었습니다) 20번 문제는 ANIMAL_OUTS와 ANIMAL_INS 두 테이블에서 모두 조회를 해야하는 문제이다.

FROM 절에 2개의 테이블이 들어간다.

 

정답

-- 코드를 입력하세요
SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_OUTS OUTS, ANIMAL_INS INS 
WHERE OUTS.ANIMAL_ID = INS.ANIMAL_ID AND OUTS.DATETIME < INS.DATETIME
ORDER BY INS.DATETIME

 

(오랜 기간 보호한 동물 1) 21번 문제는 ANIMAL_INS에 있는 정보 중, ANIMAL_OUTS에는 없는 정보를 추출하는 문제이다.

사용한 명령어: LIMIT, 서브쿼리

 

정답

-- 코드를 입력하세요
SELECT NAME, DATETIME
FROM ANIMAL_INS
WHERE ANIMAL_ID NOT IN (SELECT ANIMAL_ID FROM ANIMAL_OUTS)
ORDER BY DATETIME
LIMIT 3

 

(보호소에서 중성화한 동물) 22번 문제는 LIKE 명령어를 사용하는 문제이다.

OUTS.SEX_UPON_OUTCOME LIKE '%blabla%'  
의 의미는 해당 OUTS.SEX_UPON_OUTCOME이 blabla라는 글자를 가지고 있는지를 물어보는 조건이다.

 

정답

-- 코드를 입력하세요
SELECT INS.ANIMAL_ID, INS.ANIMAL_TYPE, INS.NAME
FROM ANIMAL_INS INS, ANIMAL_OUTS OUTS
WHERE INS.ANIMAL_ID = OUTS.ANIMAL_ID AND (INS.SEX_UPON_INTAKE LIKE '%Intact%' AND (OUTS.SEX_UPON_OUTCOME LIKE '%Spayed%' OR OUTS.SEX_UPON_OUTCOME LIKE '%Neutered%'))
ORDER BY INS.ANIMAL_ID

 

(루시와 엘라 찾기) 23번 문제는 IN 조건식을 사용하는 문제이다.

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty')
ORDER BY ANIMAL_ID

 

(이름에 el이 들어가는 동물 찾기) 24번 문제는 LIKE를 사용하여 문자열 포함여부를 확인하는 문제이다

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%el%'
ORDER BY NAME

 

(중성화 여부 파악하기) 25번 문제는 SELECT 절에 CASE WHEN 문을 사용해서 조건식에 따른 정보를 추출해주는 문제입니다.

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, CASE WHEN (SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%') THEN 'O' ELSE 'X' END AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

(오랜 기간 보호한 동물 2) 26번 문제는 FROM 절에 2개의 테이블을 가져와서 각 테이블의 데이터를 찾아서 푸는 문제이다.

LIMIT 사용

 

정답

-- 코드를 입력하세요
SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_OUTS OUTS, ANIMAL_INS INS
WHERE INS.ANIMAL_ID = OUTS.ANIMAL_ID
ORDER BY INS.DATETIME - OUTS.DATETIME
LIMIT 2

 

(DATETIME에서 DATE로 형 변환) 27번 문제는 DATETIME 자료형을 DATE라는 함수를 통해 날짜만 가져와서 푸는 문제이다.

DATETIME 관련 함수로는 HOUR, DAY, MINUTE, DATE 등이 있다.

 

정답

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, SUBSTR(DATE(DATETIME),1,10) AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

 

곧 시간을 내서 DB를 직접 설계하고 운영하는 프로젝트도 해봐야겠다.

특히 내가 가고자 하는 직군이 빅데이터 엔지니어 직군인데,

요즘에 빅데이터 엔지니어 채용 직무에 NoSQL을 사용 경험이 많이 보여서 한번 직접 해봐야겠다.

 

코로나로 인해 다들 취업이 어렵고 힘드실텐데 힘내셨으면 좋겠다.

반응형
반응형

 

 

그렇게 복잡한 문제는 아니라고 생각했는데,

생각보다 시간을 많이 들인 것 같다.

 

그래도 차분하게 접근만 하면,

프로그래머스 Level 2정도도 금방 정복할 수 있을 것으로 예상!!

 

 

아래는 정답 코드이다.

def solution(skill, skill_trees):
    answer = 0
    arr = []
    
    for i in range(len(skill_trees)):
        check = 0
        check_ = 0
        for j in range(len(skill_trees[i])):
            if skill_trees[i][j] in skill:
                check_ += 1
                
            if skill_trees[i][j] == skill[check]:
                check += 1
                if check == len(skill):
                    break
                    
        if check_ == check:
            answer += 1
    
    return answer

 

 

혹시 코딩테스트가 어렵거나, 준비하는데 함께 공부하실 분들은

아래에 제가 올린 다양한 풀이 강의가 있으니 함께 공부해요~!!

 

https://www.youtube.com/channel/UCYYao-BSPaetw7N2GFFJ-Yw?view_as=subscriber

 

Henry Joo

 

www.youtube.com

 

반응형
반응형

 

오늘도 하루에 코딩 문제 3문제 풀기에 도전한다.

 

프로그래머스에 Level 1에 있는 문제들은 조금만 생각하면 풀 수 있는 수준인 것 같다.

 

그 중에 K번째수를 찾는 문제는 제일 쉬운 문제 중에 하나다.

 

문제를 푸는 목적을

자신이 할 수 있는 언어 문법을 공부한다고 생각하면 좋을 것 같다.

 

내가 푼 문제의 정답은 아래와 같다.

 

def solution(array, commands):
    answer = []
    
    for idx in range(len(commands)):
        i = commands[idx][0]
        j = commands[idx][1]
        k = commands[idx][2]
        answer.append(sorted(array[i-1:j])[k-1])
    
    return answer

 

코딩테스트 관련 문제들을 풀어놓은 강의를 하고 있다.

코딩테스트의 어려움이 있으신 분들은

다른 언어 대비 비교적 직관적이고 빠르게 배우기 쉬운 Python을 활용해서 연습을 해보면 좋을 것 같다.

 

https://www.youtube.com/channel/UCYYao-BSPaetw7N2GFFJ-Yw?view_as=subscriber

 

Henry Joo

 

www.youtube.com

 

반응형
반응형

내일 프로그래머스에서 쏘카 개발자 채용 코딩테스트를 봐야해서

공부하고 있다.

 

근데 level 1은 생각보다 쉬운 것 같다.

 

어려운 알고리즘은 아닌 것 같고

일반적으로 생각할 수 있는 방법으로 잘 풀린다.

 

 

def solution(answers):
    
    supo1 = 0
    supo2 = 0
    supo3 = 0
    
    # 1번 수포자의 변수
    supo1_arr = [1,2,3,4,5]
    
    # 2번 수포자의 변수
    supo2_arr = [2,1,2,3,2,4,2,5]
    
    # 3번 수포자의 변수
    supo3_arr = [3,3,1,1,2,2,4,4,5,5]
    
    for i in range(len(answers)):
        # 1번 수포자의 채점
        if answers[i] == supo1_arr[i%5]:
            supo1 += 1
        
        # 2번 수포자의 채점
        if answers[i] == supo2_arr[i%8]:
            supo2 += 1
        
        # 3번 수포자의 채점
        if answers[i] == supo3_arr[i%10]:
            supo3 += 1
    
    # dict()으로 정렬해서 가장 큰 점수 가져오기
    max_value = {}
    max_value[1] = supo1
    max_value[2] = supo2
    max_value[3] = supo3
    
    # 정렬
    max_value = sorted(max_value.items(), key=f1, reverse=True)
    max_num = max_value[0][1]
    
    # 가장 큰 값과 값이 비슷하면 result 배열에 넣어줌
    result = []
        
    for i,v in max_value:
        if v == max_num:
            result.append(i)
    
    # result 반환
    return result
    
    
def f1(x):
    return x[1]

 

 

 

아래 사이트를 들어가면

어느정도 로직은 비슷한데,

다양한 python 내장 함수를 사용해서 훨씬 간결하게 짠 코드들이 많다.

열심히 노력해야겠다

 

https://programmers.co.kr/learn/courses/30/lessons/42840/solution_groups?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

P.S 혹시 코딩테스트를 대비하고 공부하고 싶으신 분들을 위해 강의를 올리고 있습니다.(많은 참여 부탁드립니다~~)

 

https://www.youtube.com/channel/UCYYao-BSPaetw7N2GFFJ-Yw?view_as=subscriber

 

Henry Joo

 

www.youtube.com

 

반응형
반응형

 

 

오늘의 목표

프로그래머스 문제 3문제 정도 풀어보기!

 

프로그래머스 - 완주하지 못한 선수 문제풀이 를 풀어보았다.

 

 

set이라는 자료형을 사용하면 차집합을 낼 수 있기 때문에

결과 = list(set(input1) - set(input2))

* 형태로 풀어주려고 했다가 동명이인일 경우 set에서 하나만 남기고 제거해버리기 때문에

동명이인인 경우를 다시 생각해주었다.

 

다 풀고 나서 알게된 사실은

위의 *동명이인의 경우에는 Counter 자료형을 통해 풀어줄 수 있다고 한다.(Set 대신 Counter 사용)

 

def solution(participant, completion):
    
    # 미완주자가 동명이인이 아닐 경우, 차집합으로 생각하기
    complement = list(set(participant) - set(completion))
    
    if len(complement) != 0:
        return complement[0]
    
    # 동명이인일 경우, 정렬하여 다른 시점에서 반환해주기(미완주자 1명이므로)
    participant = sorted(participant)
    completion = sorted(completion)
    
    for i in range(len(participant)):
        if participant[i] != completion[i]:
            return participant[i]
    
    answer = ''
    return answer

 

나와 같은 방법으로 푸는 사람들도 많이 있었고,

Counter와, zip 이라는 클래스, 명령어를 사용해서 푸는 사람들도 있었다.(하단의 링크 참조)

 

https://programmers.co.kr/learn/courses/30/lessons/42576/solution_groups?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

P.S 혹시 코딩테스트 준비가 어려우신 분들은 저의 알고리즘 강의를 참고해주시기 바랍니다!!ㅎㅎ

 

https://www.youtube.com/channel/UCYYao-BSPaetw7N2GFFJ-Yw?view_as=subscriber

 

Henry Joo

 

www.youtube.com

 

반응형
반응형

 

 

알고리즘 문제인지 알았지만

SQL 문제였다.

 

하지만 SQL 로직에도 알고리즘이 필요하기 때문에 풀어보았다.

 

다른 일정이 있어서 다 풀진 못했지만 푼 부분까지 정답을 정리해보았다.

 

1번 문제

-- 코드를 입력하세요
SELECT MAX(DATETIME)
FROM ANIMAL_INS
-- ORDER BY DATETIME

 

2번 문제

-- 코드를 입력하세요
SELECT MIN(DATETIME)
FROM ANIMAL_INS

 

3번 문제

-- 코드를 입력하세요
SELECT count(*)
FROM ANIMAL_INS

 

4번 문제

-- 코드를 입력하세요
SELECT COUNT(DISTINCT(NAME))
FROM ANIMAL_INS

 

5번 문제

-- 코드를 입력하세요
SELECT ANIMAL_TYPE, count(*)
FROM ANIMAL_INS
WHERE ANIMAL_TYPE IN ('Cat','Dog')
GROUP BY ANIMAL_TYPE

 

6번 문제

-- 코드를 입력하세요
SELECT *
FROM (
SELECT NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME) A
WHERE A.COUNT >= 2 AND A.NAME IS NOT NULL
ORDER BY A.NAME

 

7번 문제

-- 코드를 입력하세요
SELECT hour(DATETIME) HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY hour(DATETIME)
HAVING HOUR >= 9 AND HOUR <= 19
ORDER BY hour(DATETIME)

 

8번 문제

-- 코드를 입력하세요
set @a := -1;
SELECT HOUR, IFNULL(COUNT,0)
FROM(SELECT HOUR(DATETIME) AS HOUR1, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)) real_table RIGHT JOIN (SELECT *
FROM (SELECT @a:=@a+1 as HOUR FROM ANIMAL_OUTS) A
WHERE A.HOUR >= 0 AND A.HOUR < 24) total_table ON real_table.HOUR1 = total_table.HOUR
반응형

+ Recent posts