- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

Level1 문제이고, 스스로 푼 문제다 

 

basket에서 top에 있는 수와 다른지를 확인해야하고, indexError를 피하기 위해서 인형이 아닌 -1을 먼저 basket의 인덱스 0으로 넣어놨다 

 

첫번째 문제

크레인이 임의로 움직이는 줄 알고, 그 움직임을 파악하기가 어려웠다 

근데 문제를 잘 읽어보니 크레인이 움직이는 열이 moves 리스트로 주어졌고, 그 열을 따라 아래로 움직이다가 인형을 발견하면 옮기는 것이었다 (문제를 꼼꼼히 읽자)

 

두번째 문제 

그래서 moves에 주어진 열의 행들을 조사하는데, 주어진 행렬은 모두 0부터 시작하는데, 문제에서는 열이 1부터 시작하므로 

주어진 열 -= 1을 하지 않아서 IndexError를 냈다 

 

세번째 문제 

처음에는 while문으로 해당 열에서 인형의 행을 구하려했는데 계속 IndexError가 나서 for문으로 바꿨더니 error 없이 81%까지 맞았다 

 

네번째 문제 

2 / 11 만큼 틀리는지 알려고 VsCode를 돌렸는데, 1열에서 인형이 없는데 1열로 움직이는 경우가 있는데 이것에 대한 

분류를 하지 않았다. 인형이 없으면 아무것도 하지 않는 로직을 만들어야 했다 

그래서 flag를 활용해서 flag가 True인 경우면 크레인을 실행하도록 했더니 정답이 떴다 

 

- 정답 풀이 :

def solution(board, moves):
    n = len(board)
    m = len(board[0])
    basket = [-1]
    count = 0
    
    for col in moves: #움직이는 열 
        row = 0
        col -= 1
        flag = False
        for row in range(n):
            if board[row][col] != 0:
                flag = True
                break   
        if not flag:
            continue        
        elif board[row][col] != basket[-1] :
            basket.append(board[row][col])
            board[row][col] = 0
        elif board[row][col] == basket[-1]:
            basket.pop()
            count += 2
            board[row][col] = 0
        
        
    return count

 

- 시도해본 풀이 :

81 / 100 에서 틀렸다

def solution(board, moves):
    n = len(board)
    m = len(board[0])
    basket = [-1]
    count = 0
    
    for col in moves: #움직이는 열 
        row = 0
        col -= 1
        for row in range(n):
            if board[row][col] != 0:
                break            
        if board[row][col] != basket[-1]:
            basket.append(board[row][col])
        else:
            basket.pop()
            count += 2
        board[row][col] = 0
        print(basket)
        
    return count

- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/118666

level1이고, 스스로 푼 문제다 

이전 카카오 인턴 코테에서 봤던 문제인데, 그때는 못 풀 것 같아서 넘겼는데 풀어보니 생각보다 어렵지는 않았다 

 

주의해야할 점 

dict.keys()는 리스트가 아닌 dict_keys([dsf, dsfsd]) 형태라는 것. 그래서 리스트 형태로 따로 변환해줘야 한다 

count에서 temp[0] 중복으로써서 처음에 풀이 틀림 

비동의 부분은 1을 선택하면 1점, 2를 선택하면 2점, 3을 선택하면 3점을 받는 것이라고 생각했는데 틀렸다 

문제를 자세히 보니 1을 선택하면 3점, 2를 선택하면 2점, 3을 선택하면 1점을 받는다. 이걸 일일이 분기문으로 작성해야 하나 싶었는데, 

생각해보니 abs(choices[i] - 4) 하면 모든 숫자에 통용된다는 것을 알고 그렇게 했더니 정답이 떴다 

 

 - 정답 풀이 :

def count(dictionary):
    temp = []
    for i in dictionary.keys():
        temp.append(i)
        
    result = ''
    if dictionary[temp[0]] > dictionary[temp[1]]:
        result += temp[0]
    elif dictionary[temp[0]] < dictionary[temp[1]]:
        result += temp[1]
    else:
        result += temp[0]
    return result
                    
def solution(survey, choices):
    answer = ''
    first = {"R" : 0, "T" : 0}
    second = {"C" : 0, "F" : 0}
    third = {"J" : 0, "M" : 0}
    fourth = {"A" : 0, "N" : 0}
    
    for i in range(len(survey)):
        temp = list(survey[i])
        x,y = temp[0], temp[1]
        num = abs(choices[i] - 4)
        if 1 <= choices[i] <= 3:
            if x in first:
                first[x] += num
            elif x in second:
                second[x] += num
            elif x in third:
                third[x] += num
            elif x in fourth:
                fourth[x] += num
            
        elif choices[i] == 4:
            continue
            
        elif 5 <= choices[i] <= 7:
            if y in first:
                first[y] += num
            elif y in second:
                second[y] += num
            elif y in third:
                third[y] += num
            elif y in fourth:
                fourth[y] += num
                
    answer += count(first)
    answer += count(second)
    answer += count(third)
    answer += count(fourth)
                                    
    return answer

- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/81301

 

Level1 문제이고, 스스로 푼 문제다 

 

주어진 문자열 s의 문자들이 구분없이 있어서 이걸 어떻게 분리해야할지 몰랐다 

 

그래서 s의 첫번째 원소를 얻은 다음, 그것이 숫자라면 answer 리스트에 추가하고,

아니라면 문자가 숫자 문자(zero, one 등)가 나올때까지 pop을 진행한다. 

위 과정을 하기 위해서 directory 디렉토리를 만들었다

만들어진 문자 중에 directory 키 값이 있다면 그에 해당하는 숫자를 answer에 추가한다 

 

- 정답 풀이 :

def solution(s):
    s= list(s)
    answer = []
    directory = {"zero" : 0 , "one" : 1 , "two" : 2 , "three" : 3 , "four" : 4 ,"five" : 5 , "six" : 6 , "seven" : 7 ,"eight" : 8 , "nine" : 9}
    
    while s:
        x = s.pop(0)
        if x.isdigit():
            answer.append(int(x))
        else:
            temp = ''
            temp += x
            while s:
                if temp in directory.keys():
                    break
                y = s.pop(0)
                temp += y 
            answer.append(directory[temp])
                
    n = len(answer)
    print(answer)
    final = ''
    for i in range(len(answer)):
        final += str(answer[i])
        
    return int(final)

 

- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/86491

 

Level1 문제이고, 스스로 푼 문제 

처음에 어떻게 풀어야할지 감이 안왔는데, 예제들을 가지고 답을 어떻게 도출되었나 보니까 1열, 2열 중에 최댓값 max_num을 하나 찾고, 

각 행에서 최댓값은 max_num에 맞추면 되므로, 각 행에서의 최솟값들을 모아놓고, 그것들을 다 포함할 수 있는 최솟값의 최댓값을 찾는 로직을 생각했다. 

 

- 정답 풀이 :

def solution(sizes):
    answer = 0
    minimums = []
    
    max_num = 0 
    for i in range(len(sizes)):
        max_num = max(max_num, max(sizes[i]))
    
    for i in range(len(sizes)):
        minimums.append(min(sizes[i]))
        
    answer = max_num * max(minimums)
    
    return answer

+ Recent posts