상세 컨텐츠

본문 제목

[Python] Programmers lv1 이상한 문자 만들기, 행렬의 덧셈, 예산

Coding Test/[Python] Programmers lv1

by winCow 2021. 5. 16. 14:19

본문

1. 이상한 문자 만들기

def solution(s):
    answer = ''
    word_list = []
    for str in s.split(" "):
        string_list = []
        for i in range(len(str)):
            if i % 2 == 0:
                string_list.append(str[i].upper())
            else:
                string_list.append(str[i].lower())
        word_list.append(''.join(string_list))
    answer = ' '.join(word_list)
    return answer

 

띄어쓰기를 기준으로 단어를 나누고, 각 단어의 홀수 번째 문자는 소문자, 짝수 번째 문자는 대문자로 바꾸어야 한다. 이를 위해 먼저 문장을 나눈 단어들을 넣을 빈 배열인 word_list를 만들어 둔다. split으로 문장 s를 띄어쓰기를 기준으로 나누고, 그 모든 원소, 즉 각각의 단어를 다시 쪼개기 위해, string_list를 만들고 다시 한 번 for 문을 입력한다. 각각의 글자의 인덱스를 2로 나눈 나머지가 0인 경우, 해당 글자를 upper를 이용해 대문자로 만든 뒤 string_list에 넣고, 나머지는 lower을 이용해 소문자로 만들어 string_list에 넣는다. 이를 진행하면 string_list에는, 해당 요소의 인덱스가 짝수인지 홀수인지에 따라 대문자, 소문자로 변경된 상태로 입력된다. 이것들을 ''.join() 매소드로 구분자 없는 하나의 문자로 만들어 word_list에 입력하고, 첫 번째 반복문을 통해 모든 단어에 대해 이를 반복하면 word_list에는 '이상한 문자' 상태인 단어들이 요소로 들어가게 될 것이다. 이를 띄어쓰기가 적용된 하나의 문장으로 다시 변환하기 위해, ' '.join() 매소드를 이용한다.

 

 

2. 행렬의 덧셈

def solution(arr1, arr2):
    answer = []
    for inner_arrs in arr1:
        inner_answer = []
        for i in range(len(inner_arrs)):
            inner_answer.append(inner_arrs[i] + arr2[arr1.index(inner_arrs)][i])
        answer.append(inner_answer)
    return answer

주어진 행렬 arr1과 arr2는 같은 인덱스를 가진 요소들끼리만 더하여 새로운 행렬을 반환해야 한다. 주어진 행렬은 이차원 배열이므로 배열의 요소의 요소에 접근하기 위해, 한 배열의 요소인 배열(inner_arrs) 각각에 대해 for문을 적용한다. inner_arrs의 모든 인덱스에 대한 값과, 이에 대응하는 arr2의 값을 더하기 위해 index 매소드를 이용한다. arr1.index(inner_arrs)을 작성하여 현재 반복 중인 inner_arrs의 인덱스를 받고, 이를 arr2에서 찾아 계산하는 것이다. 이를 최종적으로 inner_answer에 추가하면, 배열 arr1, arr2의 요소인 배열들은 덧셈이 완료된 상태가 된다. 이를 다시 배열로 반환하기 위해 answer에 추가해 주면 행렬의 덧셈이 완료된다.

 

 

3. 예산

def solution(d, budget):
    answer = 0
    while min(d) <= budget:
        budget -= min(d)
        answer += 1
        d.remove(min(d))
        if len(d) == 0:
            break
    return answer

주어진 예산 budget에서, 신청된 예산의 배열인 d의 최솟값부터 빼 나갈 것이므로, budget이 min(d)보다 작거나 같은 한 계속 반복하도록 while문을 이용한다. 가장 적게 신청된 예산인 min(d)를 budget에서 뺀 후 answer에는 1을 더한다. min(d)는 예산을 받았으므로 d에서 제외하고 나면, 예산을 받지 못한 나머지 d들로 while문이 다시 반복된다. 이것을 계속 반복하여 answer을 구하면 되는데, 모든 부서에 예산을 할당하여 d가 빈 배열이 되는 경우에는 오류가 발생하므로, len(d) == 0이 되면 break를 걸어 준다.

 

관련글 더보기

댓글 영역