자료구조 이론이 끝나고 이틀에 걸쳐서 연습문제를 풀었다.
기본적인 함수야 배워서 어떻게 할 수 있겠다 싶겠는데, 반복문을 자유자재로 사용하는 게 많이 아쉽다. 솔직히 미흡하다.
강사님 코드를 따라치면서 어떻게 이렇게 간결하게 나오지?
저번 주말에 했던 감탄을 오늘 다시 하다니ㅠㅠㅠㅠㅠㅠㅠ
→ 풀이
numbers = [4, 6, 7, 9]
result = []
result2 = []
for number1 in numbers:
for number2 in numbers:
if result not in numbers:
result.append([number1,number2])
print(f'result: {result}')
for num1, num2 in result:
if num1 != num2:
result2.append([num1,num2])
print(f'result2: {result2}')
리스트 변수를 처음에 result 하나만 만들었는데 처음 for문 안에서는 같은 숫자를 배제하는 과정을 넣지 못했다.
결국에는 result2에 리스트를 하나 더 할당해서 다른 숫자들의 조합을 넣는 반복문을 한번 더 실행해야만 했다.
코드가 너무 길어졌다...
→ 해답
# 해답1
numbers = [4,6,7,9]
result = []
for n1 in numbers:
for n2 in numbers:
if n1 == n2:
continue
result.append([n1,n2])
print(f'result: {result}')
print(f'length of result: {len(result)}')
# 해답2
import math
pernutation = math.factorial(len(numbers)) / math.factorial(len(numbers) - 2)
print(f'pernutation: {int(pernutation)}')
for문에 대한 압박감으로 간단하게 math모듈 이용해서 공식으로 대입해서 풀 수 있다는 사실도 간과했다.
강사님이 가볍게 짚고 넘어가실 때 아차싶었다.

나는 같은 숫자 조합을 빼느라고 경우의 수도 못 구하고 말았다. 사실 아직 continue를 for문에서 잘 사용하지를 못한다.
.
.
.
.
.
튜플의 아이템을 수정하기 못 한다는 생각에 사로잡혀서, 튜플 안에있는 value를 따로 빼서 정렬한다음 다시 딕셔너리인 채로 튜플을 집어넣으려고 하고 별짓을 다했다.
당연히 엉망진창이었고, 심지어는 어쨌든 제대로 답도 구하지 못했다.
→ 해답
fruits = ({'수박':8}, {'포도':13}, {'참외':12}, {'사과':17}, {'자두':19}, {'수박':15} )
fruits = list(fruits)
currentIdx = 0; nextIdx = 1;
lastIndex = len(fruits) -1
flag = True
while flag:
currentDic = fruits[currentIdx]
nextDic = fruits[nextIdx]
curDicCnt = list(currentDic.values())[0]
nextDicCnt = list(nextDic.values())[0]
if nextDicCnt < curDicCnt:
fruits.insert(currentIdx, fruits.pop(nextIdx))
nextIdx = currentIdx + 1
continue
nextIdx += 1
if nextIdx > lastIndex:
currentIdx += 1
nextIdx = currentIdx + 1
if currentIdx == 5:
flag = False
print(f'오름차순 정렬: {tuple(fruits)}')
반복문을 이용해서 현재 인덱스의 값과 다음 인덱스의 값을 비교해서, 값이 더 작으면 잘라내서 앞쪽 인덱스에 insert하는 코드이다. 내림차순은 첫번째 if문에서 현재과일 개수보다 다음 과일 개수가 클 때, 둘의 순서를 바꾸면 자연스럽게 재정렬할 수 있다.

.
.
.
가장 아쉬운 코드랑 가장 정답을 구하지 못한 문제를 가져왔는데, 이것 말고도 여러 문제를 풀면서 앞서 배운 enumberate()함수를 이용하는 것도 미흡하고, while문을 너무 써먹지 못 하는 점도 아쉽다. 공부 열심히 하자...