-
[코딩테스트 스터디 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이라면
- array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
- 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
- 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]]
'[프로그래머스]' 카테고리의 다른 글
[프로그래머스 스쿨] 코딩테스트 연습 Lv.0 - 230103 (0) 2023.01.03 [프로그래머스 스쿨] 파이썬을 파이썬답게 - Part 2 (0) 2023.01.03 [프로그래머스 스쿨] 코딩테스트 연습 Lv.0 - 221229 (0) 2022.12.29 [프로그래머스 스쿨] 코딩테스트 연습 Lv.0 - 221228 (1) 2022.12.27 [코딩테스트 스터디 Week1] 코딩테스트 입문 (0) 2022.12.27 - absolutes의 길이는 1 이상 1,000 이하입니다.