자체제작 문제
학생들을 가르치며 학생들에게 쉬운 알고리즘을 학습시키기 위해 만든 문제입니다. 마음껏 퍼가셔도 좋습니다. 상업적 사용은 금지합니다.
누가 제일 강한 히어로지?
list안 요소들의 자리를 서로 바꿔주는 함수
댕댕이는 어벤저스 시리즈를 본 후, 히어로들이 토르 -> 아이언맨 -> 캡틴 아메리카의 순서대로 강하다고 생각했다.
토르는 신이므로 인간이 도저히 이길 수 없고,
아이언맨은 기술로 무장했으므로 이 역시 인간의 능력 이상이며
마지막으로 캡아가 인간 중에서의 최대치라고 생각한 것이다.
하지만 같이 영화를 본 고영이의 생각은 달랐다.
캡아는 이 중에서 가장 약체인 순수 인간이면서(기계가 없는) 가장 올곧고 선한 의지를 가졌기 때문에 이 중에서 가장 강한 존재라고 말했다.
그 다음 아이언맨은 기술의 도움을 받지만 그래도 인간을 초월했다고 볼 수 있어 두번째로 강하며,
토르는 신이긴 하지만 망치 없이는 무쓸모(?)인데다 아이언맨처럼 스스로 개발한 것이 아니라 출신때문에 그냥 부여받은 것이라서 이 중에서는 가장 약한 존재로 봐야 한다고 했다.
그래서 고영이는 캡아 -> 아이언맨 -> 토르의 순으로 강하다고 생각했다.
댕댕이는 고영이의 논리에 설득당해 생각을 바꾸게 되었다.
이를 코드로 표현해보자.
댕댕이의 최초 생각을 강한 순서대로 배열해보자.
heroes = ['토르', '아이언맨', '캡틴아메리카']
토론 후의 댕댕이의 리스트는 아래와 같이 바뀌었다.
heroes = ['캡틴아메리카', '아이언맨', '토르']
위의 변화를 살펴보면 list의 [0]번째 값과 [2]번째 자리가 값이 서로 바뀌었다.
이렇게 list의 어떤 요소 두개의 자리를 서로 바꿔치기 해주는 함수를 만들어보겠다.
문제 풀기
이 함수의 이름은 바꿔치기를 의미하는 'swap'으로 하겠다.
이 함수가 하는 일은 list의 [0]번째 값과 [2]번째 값의 자리를 서로 바꾸어주는 것이다.
heroes = ['토르', '아이언맨', '캡아'] 라는 리스트가 있다고 할 때,
swap이라는 함수에 heroes를 넣고 돌린 결과가 아래와 같이 반환되도록 하면 성공이다.
그리고 heroes에는 바뀐 값이 다시 담기도록 하자.
이 함수를 돌리면 heroes의 값은 아래와 같이 된다.
[‘캡아’, ‘아이언맨’, ‘토르’]
heroes = ['토르', '아이언맨', '캡아']
def swap(list):
temp = list[0]
list[0] = list[2]
list[2] = temp
return list
heroes = swap(heroes)
응용
사람의 생각이란 유연하다. 시간이 지나면 또 바뀔 수도 있는 법이다.
또 다른 친구 보노보노는 아이언맨의 수트보다 토르의 묠니르가 더 우월한 문명의 초물질적(?) 기술이라고 말했다.
아이언맨의 수트는 토르의 묠니르보다 뒤쳐진 문명이라는 것이다.
그래서 이번에는 아이언맨을 3위로 하고 토르를 2위로 정했다.
이렇게 생각은 계속 바뀔 수 있으므로 이제부터는 바꿀 자리를 입력받기로 한다.
swap() 함수에 바꿀 값들의 자리까지 지정할 수 있도록 하자.
바꿀 값들의 위치를 매개변수 idx1, idx2 로 받기로 한다.
heroes = ['캡아', '아이언맨', '토르']
def swap(list, idx1, idx2): # n1, n2는 list내의 인덱스 번호
# 임시저장소 역할을 하는 temp에 idx1에 있는 값을 저장해둔다.
temp = list[idx1]
# idx1 위치에다 바꾸고자 하는 idx2 위치에 있는 값을 넣는다.
list[idx1] = list[idx2]
# idx2 위치에는 아까 임시저장소 temp에 기록해두었던 최초 idx1 위치에 있던 값을 가져온다.
list[idx2] = temp
return list
# 인덱스 1번 값과 인덱스 2번 값의 자리를 서로 바꾼다.
heroes = swap(heroes, 1, 2)
이제 heroes에는 ['캡아', '토르', '아이언맨'] 이 담겨있을 것이다.
여러분은 과연 어떤 순서대로 강하다고 생각하는가?
heroes = ['배트맨', '슈퍼맨', '아이언맨', '완다']
이와 같은 데이터가 주어질 때, 위에서 만든 swap( )함수를 이용하여 여러분이 강하다고 생각하는 순서대로 영웅들을 배치해보라.
'파이썬, 알고리즘' 카테고리의 다른 글
Pyqt5 설치 안되는 문제 (0) | 2022.06.10 |
---|---|
파이썬으로 팩토리얼 알고리즘 구현하기 (0) | 2022.05.13 |
파이썬 도구, 파이참 (0) | 2022.05.10 |
파이썬 알고리즘 01. 리스트 안의 숫자 개수 세기 (0) | 2022.04.22 |