작업하면서 삽질한 내용을 바로바로 기록해두기
삽질을 하다하다 아무래도 수준이 아직 그정도가 안되는거 같아서 결국 힌트를 봤다.
힌트에 기재되어있는 내용은 내가 추론한 풀이 방법과 비슷했고^^,
감사하게도 일부만 추가할 수 있는 코드를 첨부해주셨다.
def solution(answers):
answer = []
cnt_one = 0 #맞춘 문제 수
cnt_two = 0
cnt_three = 0
one = [1, 2, 3, 4, 5] # 수포자123이 찍을 정답list
two = [2, 1, 2, 3, 2, 4, 2, 5]
three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
rank = {} # 수포자123이 맞출 문제를 rank로, 비워서 선언 = 밑에서 채울거니까!
for i, ans in enumerate(answers):
if 첫번째 수포자가 맞췄는지 확인:
첫번째 수포자의 cnt 변수를 1증가
if 두번째 수포자가 맞췄는지 확인:
두번째 수포자의 cnt 변수를 1증가
if 세번째 수포자가 맞췄는지 확인:
세번째 수포자의 cnt 변수를 1증가
# rank라는 딕셔너리를 cnt 변수로 구성
# 이 아래 부분은 분석해서 이해해보자
남은 코드 채우기를 진행하며 삽질 중..
+ 일단 헷갈리는 변수 분석을 먼저 하기!!
- answers는 문제의 정답 리스트를 담고 있는 매개변수입니다.
- answer는 현재까지 수포자들이 맞힌 문제의 정답 리스트를 담고 있는 변수입니다. = 정답 맞춘 것만 담는 리스트!
- ans는 현재 수포자가 제출한 답안입니다. = 이게 one, two, three
+ for 문의 i는,
- for i, ans in enumerate(answers):에서 i는 enumerate() 함수가 반환하는 (인덱스, 값) 쌍에서 첫 번째 원소, 즉 인덱스를 의미합니다. 즉, 반복문의 각 반복에서 i 변수에는 answers 리스트의 원소에 대응하는 인덱스가 저장됩니다. 이러한 변수는 보통 반복문에서 반복 횟수를 세는 데 사용됩니다.
다시 하나씩 생각해보자.
for i, ans in enumerate(answers): #enumerate()는 index 와 value 값을 list에서 가져온다. index는 순서, value는 요소 값
if 첫번째 수포자가 맞췄는지 확인:
if answer == one:
cnt_one += 1
일단 if문에 리스트끼리 비교해야하니까 리스트를 적어봤다.
그리고 비교하여 정답이 될때마다 1개씩 추가되도록 했다.
시도2.
각 변수를 분석한 후에 다시 내 코드를 읽어보니 서로 비교할 부분을 잘못 넣은 것 같았다.
ans는 answers의 내용을 담은 변수고, 이것을 one과 비교하는 것이 맞는거 같다.
if ans == one:
cnt_one += 1
그리고 answers의 인덱스(요소가 가지는 순서)가 i로 지칭되었으므로,
i 의 순서대로 패턴이 인식되도록 하는 코드를 넣으면좋겠다고 gpt선생님이 말씀하셨다.
근데 enumarate를 사용한 시점에서 필요한지 의문이다
# rank라는 딕셔너리를 cnt 변수로 구성
시도1.
그 다음 나올 결과값을 rank dict에 저장하고자 하였다.
그 다음 set 함수를 적어 rank에 변수를 dict로 저장하고자 했다.
cnt_one = ('"수포자1":cnt_one')
rank.setdefault = {} # setdefault 키-값 쌍을 dict에 저장
setdefault, defaultdict에 대한 제대로된 이해없이 쓰려다보니 적절한 곳에 적용했는지 알 수가 없었다..
시도2.
아무리 봐도 현 상황에 적절치 않은걸 쓴거 같아서 다시 dict에 key:value값을 추가하는 방법을 알아보았다.
if 문안에 cnt_one변수의 결과가 나오면, rank에 dict형태로 저장되도록 다시 작성해보았다.
if ans == one:
cnt_one += 1
rank['"수포자1"'] = cnt_one
return #반환하여 rank dict에 넣는다
그리고 출력이 안되는 문제.. 왤까 값도 다 잘 넣었고 rank값도 if문을 지나면서 생겼는데..
- 챗gpt에게 질문했더니 기깔나게 답변을 받았다^^;
: for문을 다 돌려서 rank에 모든 수포자의 정답 수가 저장된 후에 return하도록 코드를 수정해야 합니다.
return을 for문 밖에 위치하도록 수정하고 solution 함수를 실행하면 rank 딕셔너리가 반환됩니다.
그래서 for문 라인에 return rank가 위치하게 수정함!
이제 solution함수에 리스트값을 넣고 돌리면 출력이 된다는데 왜 안되는지 알 수가 없다..
오늘 하루 물음표만 가득한 머리야.. 수고가 많다..
내일은 끝나길..
+ 추가
밑에 작성되어있는 코드 주석을 풀고 구동했더니
IndentationError: unexpected indent 들여쓰기 에러가 있다..
solution안에 넣어야하는건지? 하지만 작동을 안하는데..?
문제가 많다..
코딩테스트에 이틀째 도전하며.. 아직은 문제를 풀때가 아니라 코드를 분석해서 이해하는 것에 집중하는 것이 좋을 것 같다
그 김에 밀려있는 웹/파이썬 강의도 들어야겠다... 끝...
++
결국 끙끙대다 튜터님께 컨설팅 받음... 1 문제 max삽질 시간은 2시간이기때문이다..
내가 선언해놓은 ans는 answers의 요소이고,
그것과 비교하기 위해서 둔 one, two, three는 리스트이기때문에
요소와 리스트를 ==비교연산자로 묶은데에서 문제가 생긴 것..
알려주신 방법은 ans(요소)가 one리스트 안에 있는지 확인하는 방법으로 == 연산자를 in 으로 바꾸어 보라고 하셨다..
순식간에 출력되는 rank... 감사합니다.....
'AI 웹개발반' 카테고리의 다른 글
[WIL]:02 2주차 병아리의 삶 (4) | 2023.03.26 |
---|---|
[TIL] 예제 만들어 공부하기, 코딩 300제! (4) | 2023.03.23 |
[TIL] 파이썬 심화 (feat. 코딩테스트 삽질) (0) | 2023.03.22 |
[TIL]파이썬 기초3 _ 미니프로젝트로 복습 중 (0) | 2023.03.21 |
[TIL+] To being 좋은 개발자,,, (0) | 2023.03.20 |