ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩테스트 스터디 Week2] 코딩테스트 연습
    [프로그래머스] 2023. 1. 2. 18:08

    1) 음양 더하기 https://school.programmers.co.kr/learn/courses/30/lessons/76501

     

    문제 설명

    어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.


    제한사항
    • absolutes의 길이는 1 이상 1,000 이하입니다.
      • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
    • signs의 길이는 absolutes의 길이와 같습니다.
      • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

     

    입출력 예

    absolutes signs result
    [4,7,12] [true,false,true] 9
    [1,2,3] [false,false,true] 0
    ##### 나의 풀이 #####
    
    def solution(absolutes, signs):
        ans_li = [0]*len(absolutes)			# absolutes의 길이만큼 ans_li의 리스트를 만들어준다.
        for i in range(len(absolutes)):		# absolutes의 길이만큼의 범위동안 for문
            ans_li[i] = absolutes[i]*(1 if signs[i] == True else -1)
            					# 만약 signs의 같은 위치값이 True이면 1, 아니면 -1을 곱해준다.
            print(f"absolutes[{i}]: {absolutes[i]} * {(1 if signs[i] == True else -1)}")
            print("곱셈결과:",absolutes[i]*(1 if signs[i] == True else -1))
        answer = sum(ans_li)			# 만들어진 ans_li의 모든 값을 더해준다.
        print(f"{ans_li}를 다 더하면 {answer}")
        return answer
        
    # 예시
    absolutes = [4,7,12]
    signs = [True, False, True]
    
    solution(absolutes, signs)
    더보기
    ##### 프린트된 결과 #####
    
    absolutes[0]: 4 * 1
    곱셈결과: 4
    absolutes[1]: 7 * -1
    곱셈결과: -7
    absolutes[2]: 12 * 1
    곱셈결과: 12
    [4, -7, 12]를 다 더하면 9

    2) K번째 수 https://school.programmers.co.kr/learn/courses/30/lessons/42748

     

    문제 설명

    배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

    예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

    1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
    2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
    3. 2에서 나온 배열의 3번째 숫자는 5입니다.

    배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

     
    제한사항
    • array의 길이는 1 이상 100 이하입니다.
    • array의 각 원소는 1 이상 100 이하입니다.
    • commands의 길이는 1 이상 50 이하입니다.
    • commands의 각 원소는 길이가 3입니다.

     

    입출력 예
    array commands return
    [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]
    ##### 나의 풀이 #####
    
    def solution(arr, commands):
        answer = []
        for i in range(len(commands)):	# commands의 길이만큼의 range동안 for문
            arr_sorted = sorted(arr[commands[i][0]-1:commands[i][1]])
            			# commands의 (첫번째 값 -1)부터, 두번째 값까지 slicing해서 
                        		# 정렬(sorted)한 리스트를 arr_sorted에 할당
                                	# 위치값을 이용해야한다는 점 주의!!
            print(f"슬라이싱한 리스트: {arr_sorted}, 리스트의 위치값: {commands[i][2]-1}, answer에 넣을 값: {arr_sorted[commands[i][2]-1]}") 
            			# print 넣은채로 제출하면 타임오버됩니다.
            answer.append(arr_sorted[commands[i][2]-1]) # arr_sorted의 위치값을 answer 리스트에 append
        return answer
    
    # 실행 예시 ################################
    arr = [1, 5, 2, 6, 3, 7, 4]
    commands = [[2, 5, 3], [4, 4, 1], [1, 7, 3]]
    
    solution(arr, commands)
    더보기
    ##### 프린트된 결과 #####
    슬라이싱한 리스트: [2, 3, 5, 6], 리스트의 위치값: 2, answer에 넣을 값: 5
    슬라이싱한 리스트: [6], 리스트의 위치값: 0, answer에 넣을 값: 6
    슬라이싱한 리스트: [1, 2, 3, 4, 5, 6, 7], 리스트의 위치값: 2, answer에 넣을 값: 3
    
    answer
    >>> [5, 6, 3]

    3) 행렬의 덧셈 https://school.programmers.co.kr/learn/courses/30/lessons/12950

     

    문제 설명

    행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

     
    제한 조건
    • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

     

    입출력 예
    arr1 arr2 return
    [[1,2],[2,3]] [[3,4],[5,6]] [[4,6],[7,9]]
    [[1],[2]] [[3],[4]] [[4],[6]]
    ##### 나의 풀이 #####
    # NumPy의 array로 변환하여 풀기
    
    import numpy as np              # numpy를 import
    def solution(arr1, arr2):
        array1 = np.array(arr1)     # arr1을 array로 변환하여 array1에 할당
        array2 = np.array(arr2)     # arr2을 array로 변환하여 array2에 할당
        array3 = array1 + array2    # array의 덧셈을 실행하여 array3에 할당
        answer = array3.tolist()	# array type으로 되어 있는 array3을 .tolist()를 실행하여 list로 변환
        return answer
    ##### 다른 사람의 풀이 #####
    # for문을 활용하여 문제 풀기
    # 코드를 주피터 노트북에 넣어보세요!!
    
    def solution(arr1, arr2):
        answer = []					# answer에 빈 리스트 할당
        for i in range(len(arr1)):			# arr1의 길이(예시: 2)를 range로 하여 for문
            print(f"\narr[{i}] 시작")
            answer.append([])			# answer에 빈 리스트 삽입: [[], []]
            for j in range(len(arr1[0])):		# arr1[0]의 길이(예시: 3)를 range로 하여 for문
                answer[i].append(arr1[i][j] + arr2[i][j])  # answer의 i 위치에 더한 값 append
                print(f"i: {i}, j: {j}, arr1[i][j]: {arr1[i][j]}, arr2[i][j]: {arr2[i][j]}, {arr1[i][j]}+{arr2[i][j]}={arr1[i][j]+arr2[i][j]}")
                					# print 해보면서 확인하면 좋다.
                print("answer:",answer)
        return answer
        
    # 주의: 지금 문제에서는 arr1과 arr2의 길이가 같아서 range를 구성할 때 len(arr1)로만 해도 문제없다.
        
    # 예시 ###################
    arr1 = [[1,2,3],[2,3,4]]
    arr2 = [[3,4,5],[5,6,7]]
    
    solution(arr1, arr2)
    더보기
    ##### 프린트된 결과 #####
    
    arr[0] 시작
    i: 0, j: 0, arr1[i][j]: 1, arr2[i][j]: 3, 1+3=4
    answer: [[4]]
    i: 0, j: 1, arr1[i][j]: 2, arr2[i][j]: 4, 2+4=6
    answer: [[4, 6]]
    i: 0, j: 2, arr1[i][j]: 3, arr2[i][j]: 5, 3+5=8
    answer: [[4, 6, 8]]
    
    arr[1] 시작
    i: 1, j: 0, arr1[i][j]: 2, arr2[i][j]: 5, 2+5=7
    answer: [[4, 6, 8], [7]]
    i: 1, j: 1, arr1[i][j]: 3, arr2[i][j]: 6, 3+6=9
    answer: [[4, 6, 8], [7, 9]]
    i: 1, j: 2, arr1[i][j]: 4, arr2[i][j]: 7, 4+7=11
    answer: [[4, 6, 8], [7, 9, 11]]

     

     

     

    댓글

Designed by Tistory.