WeniVooks

검색

위니브 월드(학생용)

여기는 은행인가 생선가게인가

1. 챕터의 목표

비교 연산: 비교 연산을 할 수 있습니다.

내장 함수: 내장 함수의 종류를 알고 활용할 수 있습니다.

리스트: 리스트의 구조를 알고 활용할 수 있습니다.

2. 스토리

라이캣은 병원을 짓는 것도 좋지만 돈을 버는 것만이 캣네생선의 목표가 될 수 없다고 생각했어요. 라이캣은 기업의 목표가 모두가 함께 가치 생산을 해내고, 무엇보다 직원들의 행복이 목적이라 생각했습니다.

밤늦게까지, 주말까지 일하면서 그런 행복감을 느낄 수 있다고 생각하지 않았습니다. 그렇기에 더욱 많은 여유를 확보하기 위해 노력했어요.

이를 위해 생산성의 향상이 필요했습니다. 어떻게 하면 생산성을 높일 수 있을까요? 더 적은 시간에 더 많이 생산하고 보다 많이 휴식을 확보할 수 있을까요?

"시스템이다냥! 시스템을 바꾸면서 함께 성장해야 한다냥!”

전체 시스템을 다 바꾸기에는 회사의 규모가 너무 커졌기 때문에 작은 부분부터 바꿔가기로 했습니다.

가장 먼저 물고기가 가장 덜 팔리는 요일은 쉬도록 하고, 방문이 많은 요일에는 이벤트를 열게 하여 더 많은 수익금을 얻을 수 있게 하였어요.

라이캣을 도와 (주)캣네생선의 시스템을 구축하세요!

2.1 임무

각 칸은 월, 화, 수, 목, 금요일에 판매된 물고기 금액을 나타냅니다. 다만 금요일은 아직 물고기를 판매하지 못해 물고기로만 남아있습니다. 골드 바는 10만 노드, fish-3는 3000노드입니다.

  1. 요일별 판매된 골드 바를 모두 줍고 리스트에 담으세요.
  2. 월, 화, 수, 목, 금에서 가장 적게 판매된 금액은 얼마인가요? min를 사용하여 가장 적은 금액을 터미널에 출력하세요.
  3. 가장 많이 판매된 요일은 어떤 요일인지 터미널에 출력하세요. 이날에는 이벤트를 엽니다.
  4. 가장 적게 판매된 요일은 어떤 요일인지 터미널에 출력하세요. 이날은 쉽니다.
2.1.1 출력
가장 적은 금액: 30000
이벤트 요일: 월요일
쉬는 날: 금요일
가장 적은 금액: 30000
이벤트 요일: 월요일
쉬는 날: 금요일
2.2 사용 코드

아래 코드들을 조합하여 문제를 풀어주세요.

mission_start()
mission_end()
l.append()
l.index()
max(1, 2, 3)
min(1, 2, 3)
sum([1, 2, 3])
move()
repeat(2, move)
pick()
print('hello world!')
item()
item()['fish-3']
item()['goldbar']
10 + 10
10 * 3
10 > 20
30 < 10
10 >= 5
3 == 3
3 != 5
5 <= 10
 
mission_start()
mission_end()
l.append()
l.index()
max(1, 2, 3)
min(1, 2, 3)
sum([1, 2, 3])
move()
repeat(2, move)
pick()
print('hello world!')
item()
item()['fish-3']
item()['goldbar']
10 + 10
10 * 3
10 > 20
30 < 10
10 >= 5
3 == 3
3 != 5
5 <= 10
 

3. 문제 풀이를 위한 개념

3.1 리스트 자료형(list)

리스트는 순서가 있으면서도 수정이 가능한 자료형입니다.

l = [10, 20, 30]
l[0] = 1000
l # [1000, 20, 30]
l = [10, 20, 30]
l[0] = 1000
l # [1000, 20, 30]

문자열 자료형처럼 인덱스를 사용하여 인덱싱할 수 있으며 인덱싱한 것에 다른 값을 넣는 것도 가능합니다. 위 예제에서는 0번째를 인덱싱하여 1000을 삽입하고 있어요. 기존에 있던 10이 리스트에서 없어지고 1000이 들어가게 됩니다.

리스트는 순서가 있기 때문에 아래와 같이 슬라이싱도 가능합니다.

l = [10, 20, 30, 40, 50, 60, 70]
l[2:4] # [30, 40]
l = [10, 20, 30, 40, 50, 60, 70]
l[2:4] # [30, 40]

우선 typedir함수를 사용하여 어떤 메서드를 사용할 수 있는지 살펴보도록 하겠습니다.

l = [10, 20, 30]
print(type(l))
print(dir(l))
l = [10, 20, 30]
print(type(l))
print(dir(l))

아래는 출력 결과입니다.

<class 'list'>
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
<class 'list'>
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

자료형의 이름은 list(리스트)라는 것을 알 수 있습니다. 문자열 자료형처럼 매직 메서드와 일반 메서드가 있습니다. 자주 사용되는 메서드를 살펴보겠습니다.

  • append: 맨 뒤에 값을 추가합니다.
    l = [10, 20, 30, 40, 50]
    l.append(60) # [10, 20, 30, 40, 50, 60]
    l = [10, 20, 30, 40, 50]
    l.append(60) # [10, 20, 30, 40, 50, 60]
  • count: 원하는 값의 개수를 출력합니다. 문자열의 count와 동일하게 사용할 수 있습니다.
    l = [10, 20, 30, 40, 10]
    l.count(10) # 10의 개수가 2개, 2개를 출력합니다.
    l = [10, 20, 30, 40, 10]
    l.count(10) # 10의 개수가 2개, 2개를 출력합니다.
  • index: 원하는 값의 위치를 출력합니다. 문자열의 index와 동일하게 사용할 수 있습니다.
    l = [10, 20, 30, 40, 50]
    l.index(30) # 30의 위치는 2번째, 2를 출력합니다.
    l = [10, 20, 30, 40, 50]
    l.index(30) # 30의 위치는 2번째, 2를 출력합니다.
  • insert: 원하는 위치에 원하는 값을 삽입합니다.
    l = [10, 20, 30, 40, 50]
    l.insert(2, 1000) # 2번째 위치에 1000을 삽입합니다.
    l # [10, 20, 1000, 30, 40, 50]
    l = [10, 20, 30, 40, 50]
    l.insert(2, 1000) # 2번째 위치에 1000을 삽입합니다.
    l # [10, 20, 1000, 30, 40, 50]
  • pop: 맨 뒤에 있는 값을 하나 꺼냅니다.
    l = [10, 20, 30, 40, 50]
    l.pop() # 50
    l # [10, 20, 30, 40]
    l = [10, 20, 30, 40, 50]
    l.pop() # 50
    l # [10, 20, 30, 40]
  • remove: 원하는 값을 삭제합니다.
    l = [10, 20, 30, 40, 50]
    l.remove(30) # 30 값을 삭제합니다.
    l # [10, 20, 40, 50]
    l = [10, 20, 30, 40, 50]
    l.remove(30) # 30 값을 삭제합니다.
    l # [10, 20, 40, 50]
  • reverse: 역순으로 만듭니다.
    l = [10, 20, 30, 40, 50]
    l.reverse()
    l # [50, 40, 30, 20, 10]
    l = [10, 20, 30, 40, 50]
    l.reverse()
    l # [50, 40, 30, 20, 10]
  • sort: 오름차순으로 정렬합니다.
    l = [20, 30, 10, 40, 50]
    l.sort()
    l # [10, 20, 30, 40, 50]
    l = [20, 30, 10, 40, 50]
    l.sort()
    l # [10, 20, 30, 40, 50]
3.2 내장함수

이번에는 내장 함수에 대해 알아보도록 하겠습니다. 내장 함수는 우리가 선언하지 않고도 사용했던 함수를 말합니다. 예를 들어 print, dir, type 등은 모두 내장 함수입니다. 아래 공식 홈페이지에서 내장 함수 목록을 볼 수 있습니다. google에서 python built-in functions라고 검색을 해도 됩니다. 살펴보는 것만으로도 도움이 많이 되니 꼭 한 번 방문해 보세요.

Built-in Functions

여기서 우리는 min, max, sum을 살펴볼 것입니다. 함수명 그대로 최솟값, 최댓값, 합을 출력하는 함수입니다.

l = [10, 20, 30, 40, 50]
print(min(l)) # 10
print(max(l)) # 50
print(sum(l)) # 150
l = [10, 20, 30, 40, 50]
print(min(l)) # 10
print(max(l)) # 50
print(sum(l)) # 150
2.5 직원의 승진2.7 무료 밥차