unnjena
궁금한이야기J
unnjena
전체 방문자
오늘
어제
  • 분류 전체보기 (28)
    • Graduate M.S. (0)
      • Paper Review (0)
      • Project Related (0)
    • Undergraduate (14)
      • ML & DL (9)
      • Otherwise (1)
      • Programming (4)
    • etc. (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 취준생
  • 컴퓨터네트워크 #Traceroute
  • 업스테이지
  • Coding
  • Deepfake
  • TEST
  • AI교육
  • network #delay #loss #throughput #컴퓨터네트워크
  • Python
  • Annotation #tool
  • 지나영교수님
  • #computer_network #컴퓨터네트워크
  • 컴퓨터네트워크 #인터넷
  • 서비스기획
  • 인공지능입문
  • 세바시
  • network #edge #컴퓨터네트워크
  • PM
  • 카공
  • 취준일기
  • AI_Production_Lifecycle
  • 인생질문
  • Jump_into_the_AI_World
  • Upstage

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
unnjena
Undergraduate/Programming

[coding test] 2019 카카오 개발자 겨울 인턴십 문제

Undergraduate/Programming

[coding test] 2019 카카오 개발자 겨울 인턴십 문제

2020. 5. 9. 10:58

1,2,3번은 평이한 난이도라 코드만 keep. 10~20줄 내외다.(각 문제당 약 2~30분 동안 풀었음)

 

1.크레인 인형뽑기 게임

from collections import deque
def solution(board, moves):
    leng = len(board)
    q = deque([])
    count = 0
    for i in moves:
        for j in range(leng):
            if board[j][i - 1] != 0:
                q.append(board[j][i - 1])
                if len(q) >1 and q[len(q)-1]==q[len(q)-2]:
                    count += 2
                    q.pop()
                    q.pop()
                board[j][i - 1] = 0
                break
    return count

2. 튜플

def solution(s):
    ss = s[2:-2].split('},{')
    ss_len = [len(i) for i in ss]
    ss_len.sort()
    sorted_len = ss_len.copy()
    for i in range(len(ss_len)):
        for j in ss:
            if ss_len[i] == len(j):
                sorted_len[i] = j
    sorted_len = [i.split(',') for i in sorted_len]
    result = []
    for i in sorted_len:
        for j in result:
            if j in i:
                i.remove(j)
        result.append(i[0])
    result = [int(i) for i in result]
    return result

3. 불량 사용자

from itertools import product
def solution(user_id, banned_id):
    suspected_id = []
    for i in banned_id:
        suspected = []
        for j in user_id:
            if len(i)==len(j):
                score = 0
                for z in range(len(i)):
                    if i[z] != '*' and i[z] == j[z]:
                        score +=1
                if score == len(i)-i.count('*'):
                    suspected.append(j)
        suspected_id.append(suspected)
    confirm = list(product(*suspected_id))
    confirm = [sorted(list(i)) for i in confirm if len(set(i))==len(i)]
    answer = len(list(set(map(tuple,confirm))))
    return answer

4. 호텔 방 배정

# 정확 100, 효율 100
def solution(k, room_number):
    room_dic = {}
    ret = []
    for i in room_number:
        n = i
        visit = [n]
        while n in room_dic:
            n = room_dic[n]
            visit.append(n)
        ret.append(n)
        for j in visit:
            room_dic[j] = n+1
    return ret
# 내 풀이 : 정확 100, 효율 0
from collections import deque
def solution(k, room_number):
    q = deque([i for i in range(1,k+1)])
    confirm_num = room_number.copy()
    leng = len(room_number)
    for i in range(leng):
        if room_number[i] in q:
            q.remove(room_number[i])
            confirm_num[i] = room_number[i]
        else:
            p = q.copy()
            for j in p:
                if j > room_number[i]:
                    confirm_num[i] = j
                    q.remove(j)
                    break
    return confirm_num
  • 너무 모든 문제를 collections으로 풀려고 했다.
  • append의 시간복잡도는 O(1)이다(써도 된다!) remove나 del은 조금 곤란..

5. 징검다리 건너기

# 정확 100, 효율 100
def check(stones,k,n):
    temp = k
    for stone in stones:
        if stone < n:
            temp -= 1
        else:
            temp = k

        if temp == 0:
            return False
    return True

def solution(stones, k):
    l = 0
    r = 200000000
    while l<r-1:
        n = (l+r)//2
        canJump = check(stones,k,n)

        if canJump:
            l = n
        else:
            r = n

    rok = check(stones,k,r)
    if rok:
        return r
    else:
        return l
  • 아래는 패기롭게 구현해봤지만 test case 고작 2개 성공(어디가 에러인지 찾는 중)
count = 0
con = '0, '*k
con = con[:len(con)-2]
while True:
    stones = [i - min([i for i in stones if i > 0]) if i - min([i for i in stones if i > 0]) >= 0 else i for i in stones]
    count += 1
    if con in str(stones):
        break

 

'Undergraduate > Programming' 카테고리의 다른 글

[github] 관련 명령어  (0) 2020.11.20
[python] enumerate 함수  (0) 2020.05.09
[Python] 리스트(list)에서 '조합' 찾기(product,permutations,combinations)  (0) 2020.05.08
  • 1.크레인 인형뽑기 게임
  • 2. 튜플
  • 3. 불량 사용자
  • 4. 호텔 방 배정
  • 5. 징검다리 건너기
'Undergraduate/Programming' 카테고리의 다른 글
  • [github] 관련 명령어
  • [python] enumerate 함수
  • [Python] 리스트(list)에서 '조합' 찾기(product,permutations,combinations)
unnjena
unnjena
모든 궁금증과 그 해답을 담는 공간 Github : https://github.com/JaeheeRyu

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.