본문 바로가기

Python/코딩테스트

[프로그래머스/python] 코딩테스트 연습 Lv.1 1주차 (5월 네 번째 주)

728x90

제일 작은 수 제거하기

문제 설명

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

 

입출력 예

 

문제 발생

def solution(arr):
    answer = []
    if len(arr)==1:
        answer.append(-1)
        return answer
    min = arr[0]
    for i in arr:
        if min>i:
            min=i
    arr.remove(i)
    answer = arr
    return answer

생전 처음 보는 채점 결과 ㄷㄷ

결국, 다른 분들의 풀이를 찾아보게 됨 ㅠ

비효율적 코드라는 답을 얻음

 

수정 코드 Solution

def solution(arr):
    if len(arr)==1:
        return [-1]
    arr.remove(min(arr))
    return arr

코드를 좀 더 간단하게 씀

 

Result

앞으로는 뇌빼고 코드 쓰지 말고 신중해야겠다는 생각이 듦

 

없는 숫자 더하기

문제 설명

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

 

입출력 예

 

Solution

def solution(numbers):
    answer = 0
    numbers.sort()
    arr = [10 for i in range(10)]
    for i in numbers:
        arr[i]=i
    for i in range(len(arr)):
        if arr[i]==10:
            answer += i
    return answer

코드 설명:

1. 입력받은 숫자 배열을 정렬한다. (사실 정렬은 필요 없음)

2. 10이 10개가 든 숫자 배열 arr을 만든다.

3. for문을 이용하여 0번째 array에는 0, 1번째 array에는 1 이런식으로 입력받은 number 값과 인덱스값이 일치하는 곳을 10 대신 본인을 넣는다.

4. 그러면 찾을 수 없는 숫자는 10으로 그대로 남게 된다. [0, 1, 2, 3, 4, 10, 6, 7, 8, 10]과 같이!

5. for문을 통해 만약 10이 발견되면 return값에 인덱스 값을 더해주면서 없는 숫자를 더한 값을 출력한다. (arr[5] == 10 -> 5를 더함)

 

Result

 

[1차] 비밀지도 (2018 KAKAO BLIND RECRUITMENT)

문제 설명

입출력 예

Solution

def solution(n, arr1, arr2):
    answer = []
    map1 = [[0 for _ in range(n)] for _ in range(n)]
    map2 = [[0 for _ in range(n)] for _ in range(n)]
    for i in range(n):
        count = 0
        div = arr1[i]
        if div==0:
            continue
        while(1): #map1 2진수 표현
            if div==1:
                map1[i][count]=1
                break
            div, mod = divmod(div, 2) #(몫, 나머지)
            map1[i][count]=mod #나머지 저장
            count += 1
        map1[i].reverse() #역순으로 저장된 2진수 reverse
    for i in range(n):
        count = 0
        div = arr2[i]
        if div==0:
            continue
        while(1): #map2 2진수 표현
            if div==1:
                map2[i][count]=1
                break
            div, mod = divmod(div, 2)
            map2[i][count]=mod
            count += 1
        map2[i].reverse()
    for i in range(n):
        map = ''
        for j in range(n):
            if map1[i][j]==0 and map2[i][j]==0:
                map += " "
            else:
                map += "#"
        answer.append(map)
    return answer

 

Result

 

최소직사각

문제 설명

Solution

def solution(sizes):
    answer = 0
    max1 = []
    max2 = []
    for i in sizes:
        max1.append(max(i)) #직사각형 가로, 세로 중 max만 저장
        max2.append(min(i)) #직사각형 가로, 세로 중 min만 저장
    answer = max(max1)*max(max2) #max1 중, 가장 큰 값과 max2 중, 가장 큰 값으로 지갑 만들면 됨
    return answer

 

Result

728x90