코딩테스트/programmers (python)

20240113/ programmers/ 1단계/ python

seulll 2024. 1. 13. 16:46

1. 코딩테스트 연습 - 행렬의 덧셈 | 프로그래머스 스쿨 (programmers.co.kr)

문제 설명

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

 

나의 풀이

def solution(arr1, arr2):
    arr=[[],[]]
    for i in range(len(arr1)):
        if len(arr1[0])==1:
            arr[i].append(arr1[i]+arr2[i])
        else:
            for j in range(len(arr1)):
                arr[i][j].append(arr1[i][j]+arr2[i][j])
    return arr

arr를 빈 리스트로 초기화 하면 X

 

모범 답안

def solution(arr1, arr2):
    for i in range(len(arr1)):
        for j in range(len(arr1[0])):
            arr1[i][j]+=arr2[i][j]
    return arr1

새로운 리스트 만들지 않고 기존 리스트에 값 추가

 

2. 코딩테스트 연습 - 직사각형 별찍기 | 프로그래머스 스쿨 (programmers.co.kr)

3. 코딩테스트 연습 - 최대공약수와 최소공배수 | 프로그래머스 스쿨 (programmers.co.kr)

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

나의 풀이

.

 

모범 답안

def solution(n, m):
    answer = []
    # 최대공약수
    for i in range(min(n,m),0,-1): 
        if n%i ==0 and m%i==0:
            answer.append(i)
            break

    # 최소공배수
    for i in range(max(n,m),n*m+1):
        if i%n == 0 and i%m == 0:
            answer.append(i)
            break
    return answer

최대공약수 for 범위 주의 

 

4. 코딩테스트 연습 - 같은 숫자는 싫어 | 프로그래머스 스쿨 (programmers.co.kr)

문제 설명

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

  • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
  • arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.

배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

 

나의 풀이

.

모범 답안

def solution(arr):
    answer = []
    for i in arr:
        if answer[-1:] == [i]: continue
        answer.append(i)
    return answer

  i의 값과 마지막으로 넣은 값 비교해서 다르면 삽입

 

5. 코딩테스트 연습 - 이상한 문자 만들기 | 프로그래머스 스쿨 (programmers.co.kr)

문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

나의 풀이

.

모범 답안

def solution(s):
    answer = ''
    string = s.split(' ')
    for i in string:
        for j in range(len(i)):
            if j % 2 == 0:
                answer += i[j].upper()
            else:
                answer += i[j].lower()
        answer+= ' '
    return answer[0:-1]

공백이 2번 연속 나올 것을 고려해서 split을 써도 연속된 공백을 출력하기 어려움이 있어 막혔는데 

split()이 아닌 split(' ')을 사용해 한 개 이상의 공백은 보존하고, 마지막에 answer+=' '로 공백을 추가하여 출력하면 된다.

또 split()은 가장 마지막 공백은 고려하지 않으므로 answer[0:-1]으로 직접 제거해야 한다.