728x90
반응형

문제:

풀이방법:

 예시를 보면 이름이 없다는 것은 NAME의 값이 NULL임을 뜻하는 것이다. 따라서 NULL인 값을 찾기 위해서 WHERE 조건절을 사용해야 한다. NULL 다른 조건과는 달리 = 를 사용하지 않고 is를 사용한다. 따라서 WHERE NAME IS NULL을 사용해야 이름이 NULL인 값을 찾을 수 있다.

1
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME is NULL ORDER BY ANIMAL_ID;
cs

문제링크:

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

728x90
반응형
728x90
반응형

문제:

풀이방법:

 오름차순으로 정렬한 뒤에 1스테이지부터 차례대로 실패율을 구해 나갔다. n+1 스테이지를 구할 때에는 n스테이지까지 실패한 사람들은 포함시키면 안되므로 idx 값을 두어서 포함되지 않도록 하였다. 이렇게 구한 값들을 answer_rate에 dict 형식으로 저장을 한다. dict 타입으로 저장을 하고 items으로 이 값을 가져오면 스테이지에 대한 정보와 그 스테이지의 실패율을 튜플값으로 묶어서 알 수 있기 때문이다. 따라서 실패율을 기준으로 정렬을 하고 출력은 스테이지에 대한 정보만 출력하도록 하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def solution(N, stages):
    answer = []
    answer_rate={}
    number=1
    stages.sort()
    idx=0
    while((N+1)!=number):
        fail=0
        challenge=len(stages)
        for i in range(idx,len(stages)):
            if stages[i]==number:
                fail+=1
            else:
                break
        answer_rate[number]=fail/(challenge-idx)
        number+=1
        idx=i
    temp=sorted(list(answer_rate.items()),key=lambda x: x[1],reverse=True)
    for i in temp:
        answer.append(i[0])
    return answer
cs

문제링크:

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

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[Programmers]2017 Kakao.다트 게임  (0) 2019.10.02
[Programmers]2018 Kakao.후보키  (0) 2019.10.01
[Programmers]2018 Kakao. 오픈채팅방  (0) 2019.09.29
[Programmers]2017 Kakao.비밀지도  (0) 2019.09.28
[Programmers]2017 Kakao.캐시  (0) 2019.09.27
728x90
반응형

문제:

풀이방법:

여러 기준으로 정렬을 하는 것은 ORDER BY 절에 컬럼들을 나열함으로써 해결할 수 있다. ORDER BY에 디폴트 값으론 오름차순으로 정렬로 설정이 되어 있지만 DESC라는 조건을 넣어주면 이를 내림차순으로 정렬할 수 있다.

1
SELECT ANIMAL_ID,NAME,DATETIME FROM ANIMAL_INS ORDER BY NAME,DATETIME DESC;
cs

문제링크:

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

728x90
반응형
728x90
반응형

문제:

풀이방법:

아이디에 따른 명령어와 이름을 해시 방식으로 저장을 해줌으로써 데이터를 관리하였다. 이름을 바꾸는 경우에는 맨마지막에 해당하는 이름으로 모두 반영이 되므로 Change가 나올 때마다 덮어주는 방식으로 진행하였다. 이 외에는 명령어에 따라서 알맞게 출력해주면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def solution(record):
    command=[]
    name={}
    for re in record:
        temp=re.split()
        if temp[0]=='Change':
            name[temp[1]]=temp[2]
        else:
            if temp[0]=='Enter':
                name[temp[1]]=temp[2]
            command.append((temp[0],temp[1]))
    answer=[]
    for cmd in command:
        if cmd[0]=="Enter":
            answer.append("{}님이 들어왔습니다.".format(name[cmd[1]]))
        else:
            answer.append("{}님이 나갔습니다.".format(name[cmd[1]]))
    return answer
cs

문제링크:

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

728x90
반응형
728x90
반응형

문제:

풀이방법:

이진수로 바꾸는 것이 가장 중요한 문제이다. 이진수로 바꾸는 것은 python의 bin을 사용하면 바꿀수 있다. 이 때 bin을 사용하면 앞에 이진수임을 나타내는 값이 붙어 있으므로 이를 떼어서 저장하는 것이 필요하다. 그리고 이를 한 변의 크기와 동일하게 만드는 것이 중요하다. 위 문제의 예시처럼 1은 1이지만 한변의 길이가 5이므로 00001로 맞춰준 것을 알 수 있다. 길이가 동일해야 해독할 수 있으므로 이 작업이 가장 중요하다. 길이를 같게 만들었다면 이제는 단순히 반복문을 사용해서 값을 비교하고 상황에 따라 "#"과 공백을 더해주면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def solution(n, arr1, arr2):
    answer = []
    for i in range(n):
        arr1[i]=bin(arr1[i])[2:]
        arr2[i]=bin(arr2[i])[2:]
    for i in range(n):
        code=""
        a=max(len(arr1[i]),len(arr2[i]))
        if n!=len(arr1[i]):
            arr1[i]="0"*(n-len(arr1[i]))+arr1[i]
        if n!=len(arr2[i]):
            arr2[i]="0"*(n-len(arr2[i]))+arr2[i]        
        for j in range(n):
            if arr1[i][j]==arr2[i][j]:
                if arr1[i][j]=='0':
                    code+=" "
                else:
                    code+="#"
            else:
                code+="#"
        answer.append(code)
    return answer
cs

 

 

문제링크:

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

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[Programmers]2018 Kakao.실패율  (0) 2019.09.30
[Programmers]2018 Kakao. 오픈채팅방  (0) 2019.09.29
[Programmers]2017 Kakao.캐시  (0) 2019.09.27
[Programmers]2017 Kakao. 뉴스 클러스터링  (0) 2019.09.26
[BOJ]1987. 알파벳  (0) 2019.09.25
728x90
반응형

문제:

풀이방법:

조건에 주어진 LRU(Least Recently Used)를 사용하면 풀 수 있는 문제이다. LRU 캐시 교체 알고리즘이란 가장 오래전에 사용한 캐시는 자주 사용하지 않는다고 판단하고 새로 들어오는 캐시에게 자리를 내어준다는 알고리즘이다. 즉, 가장 오래전에 사용된 캐시를 빼버리고 새로운 값을 넣어버리면 된다. python의 list 내장 함수를 사용하면 어렵지 않게 풀 수 있다. list는 새로운 값을 넣어버리면 list의 맨 끝에 값을 넣기 때문에 자동적으로 인덱스 0번째에 있는 값이 오래된 값이다. 따라서 캐시에 없는 값이 들어오면 0번째 값을 빼고 새로운 값을 넣으면 LRU를 만족할 것이다. 그리고 만약 이미 있는 값이 들어왔다고 하더라도 remove로 값을 제거하고 새로 값을 넣어주어야 한다. 그래야 이 값의 사용시간이 최신화되기 때문이다. 각 행위마다 5초(miss)와 1초(hit)를 더한다면 답을 얻을 수 있을 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def solution(cacheSize,cities):
    cache=[]
    answer = 0
    for city in cities:
        if city.lower() in cache:
            answer+=1
            cache.remove(city.lower())
            cache.append(city.lower())
        else:
            answer+=5
            if 0<= len(cache) < cacheSize:
                cache.append(city.lower())
            else:
                cache.append(city.lower())
                cache.pop(0)
    return answer
cs

문제링크:

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

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[Programmers]2018 Kakao. 오픈채팅방  (0) 2019.09.29
[Programmers]2017 Kakao.비밀지도  (0) 2019.09.28
[Programmers]2017 Kakao. 뉴스 클러스터링  (0) 2019.09.26
[BOJ]1987. 알파벳  (0) 2019.09.25
[BOJ]1759. 암호 만들기  (0) 2019.09.24
728x90
반응형

문제:

풀이방법:

 입력으로 들어오는 값들을 다중집합으로 만들어야 한다. 소문자와 대문자의 구분이 필요 없으므로 소문자로 전부 바꾸고 두개씩 끊어가면서 특수문자가 있는지 파악하고 각 배열에 담는다. 

 summation이라는 두 배열의 길이의 합을 구하고 이를 교집합과 뺌으로써 합집합의 크기를 구할 것이다. summation은 공통된 원소를 두 개씩 가지고 있는 것이기 때문이다. 

 반복문을 사용해서 공통된 원소가 있을 때마다 intersect를 하나씩 증가시킨다.

이 두 변수로 자카드 유사도는 다음과 같이 구한다. int(intersect/(summation-intersect)*65536) 이 값을 구하면 답을 얻을 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def solution(str1,str2):
    str1=str1.lower()
    str2=str2.lower()
    str1_set=[]
    str2_set=[]
    for i in range(len(str1)-1):
        if (str1[i]+str1[i+1]).isalpha():
            str1_set.append(str1[i]+str1[i+1])
    for i in range(len(str2)-1):
        if (str2[i]+str2[i+1]).isalpha():
            str2_set.append(str2[i]+str2[i+1])
    summation=len(str1_set)+len(str2_set)
    intersect=0
    for i in str2_set:
        if i in str1_set:
            str1_set.remove(i)
            intersect+=1
    if summation==0:
        return 65536
    else:
        return int(intersect/(summation-intersect)*65536)
cs

 

문제링크:

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

 

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[Programmers]2017 Kakao.비밀지도  (0) 2019.09.28
[Programmers]2017 Kakao.캐시  (0) 2019.09.27
[BOJ]1987. 알파벳  (0) 2019.09.25
[BOJ]1759. 암호 만들기  (0) 2019.09.24
[BOJ]14889. 스타트와 링크  (0) 2019.09.23
728x90
반응형

문제:

풀이방법:

ORDER BY에는 옵션이 존재한다. 아무 옵션도 주지 않으면 자동으로 ASC로 되어 있다. 하지만 이 문제와 같이 역순으로 정렬을 해야 한다는 조건이 있으면 DESC를 사용하면 된다.

1
SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC;
cs

문제링크:

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

728x90
반응형
728x90
반응형

문제:

세로 R칸,가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸(1행 1열)에는 말이 놓여 있다.

말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다.

좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 프로그램을 작성하시오. 말이 지나는 칸은 좌측 상단의 칸도 포함된다.

입력:

첫째 줄에 R과 C가 빈칸을 사이에 두고 주어진다. (1<=R,C<=20)둘째 줄부터 R개의 줄에 걸쳐서 보드에 적혀 있는 C개의 대문자 알파벳들이 빈칸 없이 주어진다.

출력:

첫째 줄에 말이 지날 수 있는 최대의 칸 수를 출력한다.

풀이방법:

제일 많이 파고 들어가야 하는 문제이므로 DFS와 백트래킹을 사용하는 것이 적합하다. DFS를 사용해서 한 번 깊게 파고 난 뒤에 움직이지 못하는 경우가 된다면 다시 되돌아와서 다른 곳으로 깊게 파고 들어가도록 한다. 이때부터는 최대로 깊게 들어간 기록이 있으므로 이 기록을 넘길 때에만 값을 갱신하도록 하였다. 이렇게 모두 탐색을 마치고 더 이상 이동할 곳이 없다면 출력하도록 했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def go(board,check,x,y):
    ans=0
    for i in range(4):
        nx=x+dx[i]
        ny=y+dy[i]
        if 0<=nx<len(board) and 0<=ny<len(board[0]):
            if check[ord(board[nx][ny])-65]==False:
                check[ord(board[nx][ny])-65]=True
                count=go(board,check,nx,ny)
                if ans < count:
                    ans = count
                check[ord(board[nx][ny])-65]=False
    return ans+1
 
 
r,c=map(int,input().split())
board=[]
for i in range(r):
    board.append(list(input()))
dx=[0,0,1,-1]
dy=[1,-1,0,0]
answer=[]
check=[False]*26
x,y=0,0
check[ord(board[x][y])-65]=True
print(go(board,check,x,y))
cs

문제링크:

https://www.acmicpc.net/problem/1987

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[Programmers]2017 Kakao.캐시  (0) 2019.09.27
[Programmers]2017 Kakao. 뉴스 클러스터링  (0) 2019.09.26
[BOJ]1759. 암호 만들기  (0) 2019.09.24
[BOJ]14889. 스타트와 링크  (0) 2019.09.23
[BOJ]1697. 숨바꼭질  (0) 2019.09.22
728x90
반응형

문제:

풀이 방법:

최댓값을 구하는 함수인 MAX를 사용하면 된다. 또한 이 값을 시간이라고 컬럼명을 정했기 때문에 AS로 시간으로 지정했다.

1
SELECT MAX(DATETIME) AS "시간" FROM ANIMAL_INS;
cs

문제 링크:

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

728x90
반응형

+ Recent posts