본문 바로가기
코딩 오늘

2023.03.21 미션 파서블

by 마동휘 2023. 3. 21.

문제를 읽어도 번뜩 떠오르는 것은 없다

우선 할 수있는 것을 해보자 문제를 말그대로 해석해보자

answer [1,2,3,4,5] 이는 '정답'이라는 값으로 보인다

return [1] 1은 1번 수포자가 가장 많은 문제를 맞힌 사람이라는 것 같다

1번수포자의 찍는 방식과 동일하기때문에 1번 수포자는 모든 문제를 맞혔다

이말은 필요도 없이 아래 문항에 입출력 예 설명에 기재 되어있다

수포자의 찍는 방식 입출력 사항의 관계 이해 할 수있는것이 늘었다

제한 조건

시험은 최대 10,000 문제로 구성되어있다 , 임의로 변인을 수정하는 것이 정답이 아님을 알 수있다

문제의 정답은 1,2,3,4,5 중 하나입니다 , 정답은 복수가 아니고 문제에 하나 그리고 5가지중 하나이다

가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요

가장 높은 점수..답에 따라서는 최고 득점자가 여럿이다 return 하는 값을 오름차순..?

이는 입출력 예에서 쉽게 찾을 수 있다

어렵게 생각 할 필요없이 순서대로 정렬만 하라는 소리다

 

조건에 대해 이해가 됬다

이제 코드를 작성할 차례이다

우선 수포자 3명 각각 찍으려고 한다는 것이다

찍을 때 그들 나름의 규칙이 있고 이것은 리스트로 작성 할 수있다

lin 수포자 x 번호

    lin_1 = [1, 2, 3, 4, 5]
    lin_2 = [2, 1, 2, 3, 2, 4, 2, 5]
    lin_3 = [3, 3, 1, 1, 2, 2, 4, 4 ,5, 5]

 

가장 높은 점수를 얻은 사람을 알기전에

점수를 얼마나 얻었는 지 알아야한다

아직 아무런 문제를 풀지 않았기에 점수는 모두 0점을 가지고 있다

score = [0, 0, 0]

 

첫번째 0은 lin_1의 점수

두번째 0은 lin_2의 점수

세번째 0은 lin_3의 점수

 

answer 정답이 입력됬을때 이에 대응 하는 지에 대해

즉 정답을 맞힌지에 대해 알기 위한 항목도 필요하다 

수포자의 답변들은 규칙을 가지고 반복된다 반복,

반복문을 사용해보자...반복문이 뭐지?

 

리스트에 있는 요소들을 '차례대로' 꺼내주는 기능을 해준다

alt = [1,2,3,4,5]

 

for a in alt

      print(a)

1

2

3

4

5

------------------------------------

이러한 식으로 기능을 하는것이다

규칙을 가지고 반복되기에 반복문을 사용해야한다고 했다

문제가 원하는 바 알겠으나 그것을 어떤식으로 풀어나가야할지 모르겠다

무엇을 적어야 내가, 문제가 원하는 바가 되는가

 

지난 강의를 둘러보며 알아보고자 했다

하지만 알 수 없다

강의에 답이 나와있는 것도 아니고 어디까지나 나의 창작영역

여지껏 배운것에 대한 응용, 대응능력을 시험하기 위한 것이 아니던가

한 부분만 알려주는 강의에서는 답을 찾을 수 없다

답은 아니지만 답에 다다르는 과정을 찾을 수는 있었다

최대값을 찾는것

------------------------

num_list = [1,5,6,4,3,7,3,1,3,8,3,5,10]

max = 0

for num in num_list:

         if max < num:

             max = num

 

print(max)

-------------------------

10

반복문을 통해서 max 값을 재조정 하는 방식으로 최대값을 찾는다

num값이 max 보다 크면 대체되고를 반복하여 마지막에는 가장 큰 값을 찾아내는 것이다

 

이걸 풀고자하는 이문제에 대입하면 어찌될까

우선 찾고자 하는 것은 맞힌 문제의 수

스코어는 0에서 시작

문제를 맞히면 점수가 1점추가

score[0] == score[0] + 1

score[0] 은 lin_1의 점수이다

 

반복문을 사용해보자

for i, asr in enumerate(answers):

           if lin_1(i%5)

lin_1의 규칙을 정해주기 위해서 5로 나누어 준다 각각 lin_2 은 8로 lin_3은 10으로 나눈다

i가 변수 순서에 따라 반복되게 할 수있다

이렇게 되면 lin_1 이 첫번째로 내놓는 값은 [0] 이므로 1이다

두번째는 [1]이 되어 2가 된다

그값이 answers 와 같다면 점수를 1점 추가해주는 것을 해보자

for i, asr in enumerate(answers):

           if lin_1(i%5) == asr:

           score[0] == score[0] + 1

답안에 대한 비교가 가능하다

정답일 경우 점수가 1오른다

 

    for i in range(len(score)):
        if max(score) == score[i]:
            result.append(i+1)

 

range는 범위를 지정해준다

len(score)는 길이를 알수있게한다

문제 같은 경우 len(score)는 3이 된다

max 함수를 사용하여 score 에서 가장 큰 수를 찾고

score[i]를 통해 반복함으로서 대조할 수 있다

대조후에는 해당 순서에 +1을 하여야 하는데

이는 score 에서 첫번째는 [0]이기 때문에

1을 더해주어 개체의 혼동을 피하기 위해서다

 

https://school.programmers.co.kr/questions/39619

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

반복문의 경우 갈피를 잡을 수 없어 힘을 빌렸다

결과 해설에 가깝게 되었으나

어떻게 코드가 짜여졌는지 그 인과에 대해서 알아보고자 분투했다

특히 score[i]가 곤혹스러웠는데 i가 지칭하는 것이 각 개체임을 알게 되었다

[i%5]해당 문항은 아직도 이해가 잘 되지 않는다 나머지값을 도출해내는 것인데

가령 lin_1[i%5] 면 첫번째 차례일때 i = 1 나머지는 1 lin_1[1] = 2가 아닌 것인지..

다섯번째 차례일때는 i = 5 나머지는 0 lin_1[0] = 1..

해당 부분에 대해서는 공부가 더 필요하다

 

'코딩 오늘' 카테고리의 다른 글

2023.03.23 메서드  (1) 2023.03.24
2023.03.22 약속  (0) 2023.03.22
2023.03.20 파이썬기초  (0) 2023.03.20
2023.03.17 TIL  (0) 2023.03.17
2023.03.16 하루의 끝  (0) 2023.03.16

댓글