Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 예제
- it국비학원 후기
- oracle error
- 그리디알고리즘
- kh정보교육원 후기
- 비전공 개발자
- java17
- java문법
- 소수점출력
- 코딩테스트
- 큐
- spring mvc 기초
- containsValue
- 스택
- containsKey
- 비전공개발자취업
- 파이썬
- ip란
- 최신java
- 국비학원
- ClassNotFoundException
- 비전공 국비학원
- SQLD교재추천
- ORA-91917
- 비전공개발자
- 국비학원 후기
- sql developer logon denied
- 국비학원 추천
- Jpa기초
- 개발자면접질문
Archives
- Today
- Total
Developer J
파이썬 완주하지 못한 선수 프로그래머스 본문
반응형
문제
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한 사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
participant | completion | return |
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
잘못된 풀이
언어의 문법적 특성을 완전히 이해하지 못한 상황에서 문제를 풀고 있다는 생각이 바로 드는 코드이다.
부족한 부분을 파악하고 그에 해당하는 문법을 명확히 하기 위해 생각한 코드를 남긴다.
def solution(participant, completion):
answer = ''
participant.sort() // 각각을 오름차순으로 정렬해서
completion.sort() // 순차적으로 비교해서 같은 것은 제거하려는 생각이었다
for i in len(completion): //하지만, 잘못된 문법이다...
if participant(i) == completion(i):
participant.pop(i)
answer = participant(-1) //list 슬라이싱을 착각... participant[-1]
return answer
TypeError: 'int' object is not iterable 이라는 에러를 마주했다.
완벽히 알아야 할 개념
1. pop은 어디에 쓰는 가? list
a = [1,2,4]
a.pop()
a = [1,2]
a.pop(1)
a = [1]
2. 오류 확인 과정에서 데이터 타입 확인하는 법은?
print(type(a)) --> "<class 'int'>"
3. for문
for i in range(1, 2):
print(i) // 출력: 1
for i in range(0, 2):
print(i) // 출력: 0
// 1
person = ["jun", "jang", "sun"]
for i in person:
print(i) // 출력: jun
// jang
// sun
불가능한 케이스
result=[1, 2]
for i in range(result):
print(i)
TypeError: 'list' object cannot be interpreted as an integer
------------------------------------------------------------------
result=[1, 2]
for i in len(result):
print(i)
TypeError: 'int' object is not iterable
해답
def solution(participant, completion):
participant.sort()
completion.sort()
for p,c in zip(participant, completion):
if p != c:
return p
return participant.pop()
import collections //print는 이해를 돕기위해 넣은 것
def solution(participant, completion):
a=collections.Counter(participant)
print(a) //Counter({'leo': 1, 'kiki': 1, 'eden': 1})
answer = collections.Counter(participant) - collections.Counter(completion)
print(answer) //Counter({'leo': 1})
print(list(answer.keys())) //['leo']
return list(answer.keys())[0] // leo
알게된 문법
zip : 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다. 리스트의 같은 인덱스끼리 짝을 지어준다. 만약 리스트의 길이가 다를 경우 같은 인덱스끼리만 짝을 짓고, 나머지는 zip 객체에서 제외된다.
i=[1, 2, 3]
k=[1, 2, 3, 4]
for a in zip(i, k):
print(a)
출력
(1, 1)
(2, 2)
(3, 3)
i=["1", "2", "3"] //문자가 되는 지 항상 헷갈리기 때문에 적어본다
k=["1", "2", "3","4"]
for a in zip(i, k):
print(a)
출력
('1', '1')
('2', '2')
('3', '3')
느낀 점
문제 하나를 풀면서 잘 모르는 문법을 정리하는 것이 기본기를 다지는데 도움이 될 것 같다. 개인기(알고리즘 문제 풀기)에 사용할 언어를 python으로 정했으니 시간 나는데로 python에 익숙해져 보겠다.
반응형
'개발자 되기 part1 > Python' 카테고리의 다른 글
백준 문자열 반복 파이썬 (0) | 2021.08.12 |
---|---|
주식가격 파이썬 풀이 프로그래머스 (0) | 2021.08.02 |
다리를 지나는 트럭 python 프로그래머스 (0) | 2021.07.31 |
파이썬 백준 11399번 ATM (0) | 2021.04.17 |
파이썬 리스트를 문자열로 변환 Python list to string (0) | 2021.04.12 |