반응형

 

 

 

2019 카카오 겨울 인턴십을 위한 코딩테스트이다.

 

프로그래머스가 선정한 쉬운 1단계 문제라고 해서 풀었더니

 

생각보다 쉽게 정답을 구할 수 있었다.

 

def solution(board, moves):
    answer = 0
    
    stack_bag = []
    height_arr = []
    
    for i in range(len(board)):
        height = len(board)
        for j in range(len(board)):
            if board[j][i] == 0:
                height -= 1
            else:
                height_arr.append(height)
                break
    
    
    for i in range(len(moves)):
        if height_arr[moves[i]-1] > 0:
            stack_bag.append(board[len(board)-height_arr[moves[i]-1]][moves[i]-1])
            height_arr[moves[i]-1] -= 1
            if len(stack_bag) >= 2 and stack_bag[-1] == stack_bag[-2]:
                
                answer += 1
                del stack_bag[-1]
                del stack_bag[-1]
                
    
    return answer*2

 

 

아래 링크를 통해 문제를 풀 수 있다.

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

 

코딩테스트 연습 - 크레인 인형뽑기 게임

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

programmers.co.kr

 

 

 

 

아래는 나의 알고리즘 강의이다~~~><

 

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

 

Henry Joo

 

www.youtube.com

 

반응형
반응형
def solution(lines):
    answer = 0
    
    arr = []
    
    for i in lines:
        tmp = i.split(" ")
        print(tmp)
        T_sec = float(tmp[2][:-1])
        end_time = int(tmp[1][:2])*3600000 + int(tmp[1][3:5])*60000 + int(tmp[1][6:8])*1000 + int(tmp[1][-3:])
        start_time = end_time - T_sec*1000 + 1
        print("S :" , start_time)
        print("T_sec : ", T_sec*1000)
        print("E :" , end_time)
        
        arr.append((end_time,-1))
        arr.append((start_time,1))
    
    arr = sorted(arr)
    print(arr)
    
    count = 0
    
    for i in range(len(arr)):
        
        
        # 연다
        if i[1] == 1:
            count += 1
        else:
            
        
        
        
        
        
        
    
    
    
    
    return answer

59%의 정확도

def solution(lines):
    answer = 0
    
    if len(lines) == 1:
        return 1
    
    arr = []
    
    for i in lines:
        tmp = i.split(" ")
        T_sec = float(tmp[2][:-1])
        end_time = int(tmp[1][:2])*3600000 + int(tmp[1][3:5])*60000 + int(tmp[1][6:8])*1000 + int(tmp[1][-3:])
        start_time = end_time - T_sec*1000 + 1
        
        arr.append((end_time,-1))
        arr.append((start_time,1))
    
    arr = sorted(arr)
    
    
    
    count = 0
    cnt_arr = []
    
    intersect = 0
    num_of_bar = 0
    
    print(arr)
                
    for i in range(len(arr)):
        if arr[i][0] < 0:
            continue
        if arr[i][1] == -1:
            num_of_bar -= 1
            count += 1
        else:
            num_of_bar+= 1
        duration_time = arr[i][0] + 999
        for j in range(i,len(arr)):
            if arr[j][0] > duration_time:
                #print(arr[j])
                break
            if arr[j][0] <= duration_time and arr[j][1] == 1:
                #print(arr[j])
                count += 1
        count += num_of_bar        
        cnt_arr.append(count)
        count = 0
            
    print(cnt_arr)
        
        
    if max(cnt_arr) != 1:
        return max(cnt_arr)-1
    else:
        return max(cnt_arr)
        
        
        
        
    
    
    
    
    return answer

63%의 정확도

def solution(lines):
    answer = 0
    
    if len(lines) == 1:
        return 1
    
    arr = []
    
    len_num = 0
    
    for i in lines:
        tmp = i.split(" ")
        T_sec = float(tmp[2][:-1])
        end_time = int(tmp[1][:2])*3600000 + int(tmp[1][3:5])*60000 + int(tmp[1][6:8])*1000 + int(tmp[1][-3:])
        start_time = end_time - T_sec*1000 + 1
        
        arr.append((end_time,-1,len_num))
        arr.append((start_time,1,len_num))
        len_num += 1
    
    arr = sorted(arr)
    
    count = 0
    cnt_arr = []
    arr2 = [0]*len_num
    for i in range(len(arr)):
        
        count += sum(arr2)
        
        if arr[i][1] == 1:
            arr2[arr[i][2]] = 1
        else:
            arr2[arr[i][2]] = 0
        
        if arr[i][0] < 0:
            continue
        
        duration_time = arr[i][0] + 999
        
        for j in range(i,len(arr)):
            if arr[j][0] > duration_time:
                break
                
            if arr[j][1] == 1:
                count += 1   
                
        cnt_arr.append(count)
        count = 0
        
        
    return max(cnt_arr)
반응형
반응형

2020년 카카오 블라인드 채용이다.

신입 개발자를 코딩테스트를 통해 선별해낸다.

한번 풀어봤는데,

생각보다 어렵다ㅜㅜ

 

34점 맞아서, 틀린 코드다.ㅠㅠ

 

def solution(s):
    answer = 0
    
    tmp = s[1:]
    try:
        a = tmp.index(s[0])
    except:
        return len(s)
    
    arr = list(range(1, int(len(s)/2)+1))
    
    arr = sorted(arr, reverse=True)
    
    is_find = 0
    for i in arr:
        if s[:i] == s[i:i+i]:
            is_find = i
            break
            
    how_loop = len(s)/is_find
    rest_ = 0
    
    if how_loop % 1 != 0:
        rest_ = len(s) - (int(how_loop) * is_find)
    else:
        rest_ = 0
    
    count = 0
    arr_ = []
    for i in range(1, int(how_loop)):
        if s[is_find*(i-1):is_find*i] == s[is_find*i:is_find*(i+1)]:
            arr_.append(1)
        else:
            arr_.append(0)
    
    is_count = 0
    arr__ = []
    answer = 0
    for i in arr_:
        if i == 1:
            is_count += 1
        else:
            if is_count != 0:
                answer += is_find + len(str(is_count))
                is_count = 0
            else:
                answer += 1
    if arr_[-1] != 0:
        answer += is_find + len(str(is_count))
    else:
        answer += is_find
    answer += rest_
    return answer

 

다시 한번 풀어봐야겠다!!

 

일단 프로그래머스 게시판에서 100점 받은 고수의 코드이다!

#자릿수계산
def jari(n):
    count=1
    while(n>=10):
        n//=10
        count+=1
    return count
def solution(s):
    answer = 0
    var_count=[]    #[n개단위로잘랐을때][몇번째등장한반복]=반복횟수
    var_len=[len(s)]      #[n개단위로잘랐을때]=길이
    for i in range(1,len(s)//2+1):
        var_continue=False  #연속하는지
        var_temp_left=0     
        var_temp_right=0
        var_count.append([])
        for j in range(len(s)//i-1):
            if(s[i*j:i*(j+1)]==s[i*(j+1):i*(j+2)]):
                if(var_continue):
                    var_count[i-1][len(var_count[i-1])-1]+=1
                else:
                    var_count[i-1].append(2)
                    var_continue=True
            else:
                var_continue=False
        for j in var_count[i-1]:
            var_temp_left+=j            #생략되어지는문자길이
            var_temp_right+=i+jari(j)   #표시해야하는문자길이=자른문자길이+반복횟수
        var_len.append(len(s)-var_temp_left*i+var_temp_right)   #길이=전체길이-생략길이+표시길이
    answer=min(var_len)
    return answer

 

프로그래머스의 진짜 창의적인 코드

def compress(text, tok_len):
    words = [text[i:i+tok_len] for i in range(0, len(text), tok_len)]
    res = []
    cur_word = words[0]
    cur_cnt = 1
    for a, b in zip(words, words[1:] + ['']):
        if a == b:
            cur_cnt += 1
        else:
            res.append([cur_word, cur_cnt])
            cur_word = b
            cur_cnt = 1
    return sum(len(word) + (len(str(cnt)) if cnt > 1 else 0) for word, cnt in res)

def solution(text):
    return min(compress(text, tok_len) for tok_len in list(range(1, int(len(text)/2) + 1)) + [len(text)])

a = [
    "aabbaccc",
    "ababcdcdababcdcd",
    "abcabcdede",
    "abcabcabcabcdededededede",
    "xababcdcdababcdcd",

    'aaaaaa',
]

for x in a:
    print(solution(x))
반응형

+ Recent posts