[2022 국민대학교 겨울 인공지능 특강] 3주차 3일 학습 내용

하지원·2022년 1월 19일
0

Numpy를 이용한 롤러코스터 문제다. 탑승객들의 다음과 같은 신체조건을 기반으로 제한을 두려고 한다.
키는 150cm이상, 195cm 이하, 그리고 몸무게는 140kg 미만이어야 한다.

하지만 위의 조건을 제대로 읽지 않고 탑승한 사람들이 많아 탑승 불가능한 사람들을 구분하는 프로그램을 만들어야 한다.

info = [[151.4, 172.45, 138.65, 177.63, 207.46],
[44.64, 163.5, 112.35, 73.55, 97.83]]
배열이 위와 같이 주어졌는데, 첫 번째 리스트는 키, 두 번째는 몸무게에 대한 정보를 담고있다.

2차원 배열을 한꺼번에 한 쌍으로 읽어내는 코드를 짜야해서 당황스러웠다. 인덱스가 같은 데이터끼리 동일한 사람의 정보일 것이니 1차 배열의 길이를 먼저 구하고 그 다음에 각 2차 배열들의 길이를 이용해서 반복문(for문)을 적용하면 될 것이라 생각했는데, 생각만큼 쉽지 않았다. 게다가 조건에 맞지 않는 데이터만 새 배열에 저장해야 해서 범위 밖의 조건에 맞춰 진행하려 했지만(150cm 미만, 195cm 초과, 140kg 이상), 이 또한 오류만 가져왔다. 그리고 1차 배열의 길이인 2와 2차 배열들의 길이인 5를 같이용하려하니 출력값만 의미없이 늘어나게 되었다.

따라서 2차 배열의 크기만 이용하기로 했다. 그래서 생각해낸것이 .shape() 함수이다. 입력 배열인 info의 두 번째 배열을 불러내기 위해 info.shape[1]를 선언했고, 'number'라는 변수를 만들어 저장했다.

for i in range(number):
    if (150 <= info[0][i] <= 195) & (info[1][i] < 140):

위와 같이 반복문과 조건문을 만들었고, 저기서 & 자리에 and를 입력하면 배열에서는 맞지 않아 오류가 뜬다고 한다.
그리고 조건을 만족하는 데이터를 저장하지 않도록 해야 하여 어떻게 하면 될지 알아보던 도중 조건문의 'continue'라는 것을 알게되었다. 특정 조건을 만족하면 그 조건문의 처음으로 되돌아가게 하는 것이다.
조건을 만족하지 않는 데이터를 저장해야하기 때문에 else 조건문을 이용했다.

    else:
        answer.append(i)

최종 코딩을 다음과 같다.

import numpy as np

def solution(info):
    answer = []
    number = info.shape[1]
    for i in range(number):
        if (150 <= info[0][i] <= 195) & (info[1][i] < 140):
            continue
        else:
            answer.append(i)
    return answer

이번 과제에서 배운 것은 continue이다. 평소에 사용한 적이 없던 것을 이렇게 배우면서 앞으로 새로운 코딩 문제를 마주하게 될 때 크게 도움이 될 것이라 생각한다.

profile
국민대 전자공학부, 서강대학교 석사과정, 크래프톤 정글 2기

0개의 댓글