Day14 리스트(배열)

  • 홀수 vs 짝수
  • 5명씩
  • 할 일 목록
  • n보다 커질 때까지 더하기
  • 수열과 구간 쿼리 1

홀수 vs 짝수

문제 설명

정수 리스트 num_list가 주어집니다. 가장 첫 번째 원소를 1번 원소라고 할 때, 홀수 번째 원소들의 합과 짝수 번째 원소들의 합 중 큰 값을 return 하도록 solution 함수를 완성해주세요. 두 값이 같을 경우 그 값을 return합니다.

 

def solution(num_list):
    answer = 0
    a = 0
    b = 0
    for i in range(len(num_list)):
        if i % 2 == 0:
            a += num_list[i]
        else:
            b += num_list[i]

    return a if a == b else max(a,b)

가장 첫번째 원소를 1번 원소라고 할 때, > 이 부분에서 인덱스 번호를 주의해야겠다 싶었는데

어차피 짝, 홀수이고 간격은 2씩 차이나니까 신경쓰지 않고 풀었다

def solution(num_list):
    return max(sum(num_list[::2]), sum(num_list[1::2]))

다른 사람 풀이 : 

0부터 간격을 2씩 더하기

1부터 간격을 2씩 더하기

그 중 큰 값 출력 풀이 굿 ..


5명씩

문제 설명

최대 5명씩 탑승가능한 놀이기구를 타기 위해 줄을 서있는 사람들의 이름이 담긴 문자열 리스트 names가 주어질 때, 앞에서 부터 5명씩 묶은 그룹의 가장 앞에 서있는 사람들의 이름을 담은 리스트를 return하도록 solution 함수를 완성해주세요. 마지막 그룹이 5명이 되지 않더라도 가장 앞에 있는 사람의 이름을 포함합니다.

 

def solution(names):
    return names[::5]

바로 위 문제 풀이 응용했는데 단순에 풀려버린.. 

쉽게 풀리면 그대로 뭔가 찝찝함 그래도 파이썬 최고


할 일 목록

문제 설명

오늘 해야 할 일이 담긴 문자열 배열 todo_list와 각각의 일을 지금 마쳤는지를 나타내는 boolean 배열 finished가 매개변수로 주어질 때, todo_list에서 아직 마치지 못한 일들을 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(todo_list, finished):
    answer = []
    for idx, value in enumerate(finished):
        if value == False:
            answer.append(todo_list[idx])
    return answer

배열의 길이는 같으니 신경쓰지 않고, finished 배열의 값이 false일 때의 인덱스들만 answer에 담아 출력

def solution(todo_list, finished):
    return [work for idx, work in enumerate(todo_list) if not finished[idx]]

비슷한 코드이지만 for문을 나는 finished로 돌리고 이 사람은 todo_list를 돌려서 idx 값을 바로 활용했다.

뭔가 이게 더 깔끔하고 잘 짠 코드인듯? 굿


n보다 커질 때까지 더하기

문제 설명

정수 배열 numbers와 정수 n이 매개변수로 주어집니다. numbers의 원소를 앞에서부터 하나씩 더하다가 그 합이 n보다 커지는 순간 이때까지 더했던 원소들의 합을 return 하는 solution 함수를 작성해 주세요.

 

def solution(numbers, n):
    answer = 0
    for i in numbers:
        if answer <= n:
            answer += i
    return answer

n보다 작을 때 반복문을 돌리다가 n보다 커지면 조건에 성립하지 않아 그때의 answer 리턴

def solution(numbers, n):
    answer = 0
    i=0
    while answer<=n:
        answer+=numbers[i]
        i+=1
    return answer​

다른 사람 풀이 :

조건문을 걸고 for문을 쓰는 것보다

조건문을 사용하지 않고 바로 while문으로 처리해버리는게 더 깔끔한 것 같다. 굿


수열과 구간 쿼리 1

문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 arr[i]에 1을 더합니다.위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

def solution(arr, queries):
    answer = []
    for i in range(len(queries)):
        s, e = queries[i]
        for j in range(s, e+1):
            arr[j] += 1
    return arr

중첩 반복문 없이 풀고 싶어서 이것저것 시도해보다 결국 풀이가 생각 안나서 그냥 이렇게 풀어버림

queries 길이만큼 반복하고 [s,e]꼴을 순서대로 또 반복해서 arr 배열에 s부터 e까지의 범위에 +1을 하기

def solution(arr, queries):
    for l,r in queries:
        for i in range(l,r+1): arr[i]+=1
    return arr

다른 사람 풀이 :

다른 사람들도 다 나랑 비슷하게 푼 것 같아서 다행?

나랑 비슷한듯 하지만 조금 더 코드가 짧고 깔끔한 것 같다.

짧고 깔끔하게 짜는 연습도 해야겠다.


 

+ Recent posts