벌써 10번째 글이다. 학생들의 점수를 공백으로 구분해서 입력받고, 1~3위 학생의 수를 세어 주기로 한 사탕의 개수를 출력하는 것인데 1~3위 학생은 여러 명일 수 있고 1~3위 학생 중 중복되는 학생까지 포함해야 한다. 해답을 보고 난 뒤 무언가 이상함을 느꼈다. 해답에서는 미리 1~3위가 정해져 있으니까 사탕의 개수(count) 값을 3으로 주고, 정렬한 data_sorted 리스트에서 1~3위 학생 중 점수가 중복되는 사람을 세려고 한다. 하지만, 나는 이게 틀렸다고 생각이 들었다. 왜냐하면 만약에 1등이 4명 이상이라고 했을 때, data_sorted[-3] 값이 1등 점수가 나오고 1등의 중복되는 수만 세기 때문이다. 해답 코드로 예를 들어서 출력을 해보면, 98이 1등인데 그걸 기준으로 해서..
이어서 조금의 문제 풀이를 더 하고 오늘 글을 마치려고 한다. 구구단 문제는 중첩 함수가 대부분인데, 문제 자체가 반복문 한 줄만 작성하면 돼서 해답과 같은 내 코드 해설은 Pass 하겠다. 학생들이 뽑은 후보들을 입력받으면 뽑힌 학생의 이름과 받은 표 수를 출력하는 문제이다. 해답과는 비슷한 코드이다. 해설을 조금 하면 입력을 예시로 '원영 원영 은비 은비 은비 은비 채연 채연 채연'으로 입력값을 받았다면 count로 셌을 때 원영 = 2, 은비 = 4, 채연 = 3이 된다. 이때, 반복문을 사용해서 0부터 리스트 길이 = 9까지 반복할 때 먼저 name[n-1]인 채연 < 원영부터 계산을 실행한다. 3 < 2로 맞지 않으니까 다시 for문으로 올라가서 원영 < 은비, 2 < 4로 일치하게 된다. 일치..
코드 페스티벌의 파이썬 코드 100제 문제를 여지없이 풀고 있는 하루이다. 행성의 한글 이름을 입력하면 행성에 해당하는 영어 이름을 반환하는 프로그램을 작성하는 문제인데, 행성의 한글과 영어 이름을 딕셔너리로 작성해서 키값을 반환하도록 만들었다. 해답과 비슷하지만 다른 점은 키값을 출력하는 형태가 변수[입력값]으로 키 값을 출력하는 방식에서 벗어나서 나는 get 함수를 통해서 입력값의 키 값을 출력하는 형태로 작성했다. 첫 줄에는 학생의 이름이 공백으로 구분되어 입력, 두 번째 줄에는 수학 점수가 공백으로 구분되어 입력 시에 두 개를 합쳐 학생의 이름이 key이고 value가 수학 점수인 딕셔너리를 출력하는 문제이다. 나는 입출력 값의 예제만 출력하게 작성했는데, 해답에서는 몇 개의 값을 입력하든 리스트..
오랜만에 블로그에 들어왔다. 한동안 여러 가지 일들 때문에 글을 작성하지 못했었는데, 공부는 꾸준히 하고 있었다. 그중에서도 파이썬 문제들이 여럿 있는 코드 페스티벌 파이썬 100제 문제를 내가 풀었던 답안들로 글을 작성해보려 한다. 우리 태양계를 이루고 있는 행성은 수금 지화 목토 천해로 8개의 행성이 있다. 그 행성들 중 n번째 행성이 무엇인지 알고 싶은 문제이고, 수성이 첫 번째 행성으로 나와야 하는 문제이다. 코드를 작성하면서도 딕셔너리가 아닌 리스트로 할 수 있는 방법이 있을 텐데, 무작정 써 내려간 뒤 해답을 본 나의 현타는,, 해답에서는 리스트로 출력하는 코드였고 나는 딕셔너리로 출력하는 코드를 작성해보았다. 조금 더 간단하게 리스트로 출력하는 방법을 사고해서 다음에는 코드의 길이를 줄여보아..
오늘은 '모두의 알고리즘 with 파이썬' 공부를 했고, 그것에 관하여 작성하려고 한다. 며칠 동안 공부를 했지만 블로그에 들어와서 글을 작성하지는 못했다. 1일 1 글을 다짐한 지 5일 만에 무너졌다.. 다시 열심히 공부하고 글도 작성해야겠다. 앞에 목차들에서 여러 가지 알고리즘에 관해 공부했었다. 최댓값 찾기, 동명이인 찾기, 재귀 호출 알고리즘 등을 공부했고, 벌써 탐색과 정렬 목차까지 들어오게 되었다. 그중에서도 순차 탐색 알고리즘 문제를 풀어본 것을 공유하려고 한다. 찾는 값이 나오는 모든 위치를 리스트로 돌려주고, 찾는 값이 리스트에 없으면 빈 리스트를 돌려주는 문제이다. 이런 방식으로 작성해보았다. 해답을 보고 난 이후에 내가 작성한 코드는 다소 복잡하다는 것을 느끼게 되었다. 굳이 비교를 ..
알고리즘 공부 = 머리 터짐 = 펑! ps. '모두의 알고리즘 with 파이썬' ps에 있는 책의 내용 중 동명이인 알고리즘에 대해 문제를 풀어보고 공부해보았다. 문제의 내용은 만약 리스트에 Tom이 2명이라면 하나의 집합으로 2명의 이름을 모아 넣는 것인데, for문을 2번 사용해서 set()를 이끌어낼 수 있는 동작 방식이다. 이 주제의 마지막 연습문제 중 리스트 0번부터 시작해서 중복하지 않고, Tom - Jerry라는 한쌍을 만들어 내는 문제가 있다. 내가 작성한 코드는 이러했다. 앞에서 나온 동명이인 알고리즘을 참고하여, print문에서 각각 이름을 나열한 뒤 중복되지 않고 2명씩 짝을 짓도록 만들었다. 재귀 호출 알고리즘은 말로만 들었었는데, 접하고 나니까 더 어려운 알고리즘이었다. 팩토리얼 ..