STUDY/Algorithm

[프로그래머스] LEVEL1 모의고사, python3, 리스트 자료형

sinawi95 2019. 10. 15. 09:56
728x90

https://programmers.co.kr/learn/courses/30/lessons/42840?language=python3

def solution(answers):
    answer = []
    stud1 = [1,2,3,4,5]
    stud2 = [2,1,2,3,2,4,2,5] 
    stud3 = [3,3,1,1,2,2,4,4,5,5]
    score1 = 0
    score2 = 0
    score3 = 0

    for i in range(len(answers)):
        if stud1[i%5] == answers[i]: # len(stu1)=5
            score1 += 1
        if stud2[i%8] == answers[i]: # len(stu2)=8
            score2 += 1
        if stud3[i%10] == answers[i]: # len(stu3)=10
            score3 += 1
    
    max_score = max([score1,score2,score3])
    if max_score == score1:
        answer.append(1)
    if max_score == score2:
        answer.append(2)
    if max_score == score3:
        answer.append(3)

    return answer


나도 파이썬을 배우는 단계라 어떤 함수를 써야할지 몰라서 질문에 올려준 코드를 참고했다.

들어온 입력(answers)을 수포자 답안과 하나씩 확인하는 코드이다.

수포자 답안은 계속 반복되므로, 계속 순환할수 있도록 나머지 연산자(%)를 이용하였다.

이후 수포자 1,2,3의 최고 점수를 찾고, 그 점수와 같은 학생들을 answer에 추가시켜준다.


내가 몰랐던 부분은 리스트에 원소를 추가하는부분( answer.append() )이다.

우선 리스트는 코드에서 이런 부분을 말하는 자료형이다. C에서는 배열이지만, 파이썬에서는 리스트이다.

answer = [] ,    stud1 = [1,2,3,4,5] ,    stud2 = [2,1,2,3,2,4,2,5]  ,    stud3 = [3,3,1,1,2,2,4,4,5,5] 

 

내가 이해한 바로 배열과 리스트의 차이는 원소를 늘리고 줄일수 있는지에 차이가 있다.

C에서 배열은 처음에 설정한 값(크기, 자료형)으로만 사용할수있다. 연속된 메모리주소를 가지고 있어서 메모리를 적게 차지한다. 

C에서 리스트는 크기가 가변적이다(추가,제거가 쉽다). 포인터 주소를 저장해야하기 때문에 메모리는 조금더 사용된다.

Python에서 리스트는 크기가 가변적이고, 어떤 원소 타입이던 저장할 수 있다. 대신 C의  보다 메모리를 더 많이 필요로 한다는 단점이 있다.

 

파이썬에서 리스트의 사용은 C의 배열과 많이 비슷하다. 그리고 원소의 추가 제거가 더욱 간편하다.

추가는 (list_name).append(value) 혹은 (list_name).insert(index, value)함수를 사용하고,

제거는 del (list_name)[index] 혹은 (list_name).remove(value),(list_name).pop()을 사용한다.

함수별로 쓰임새가 다르고, 추가,제거 외에도 리스트 관련 함수가 많으니 관련 함수들을 익히는것이 좋을 것이다.

ex) sort,reverse,index,count,extend 등등

 

출처: https://wikidocs.net/14(점프 투 파이썬 - 02장 파이썬 프로그래밍의 기초, 자료형 - 02-3 리스트 자료형)

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net