문제


[문제 설명]


수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.


마라톤에 참여한 선수들의 이름이 담긴 배열 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" 



[입출력 예 설명]


예제 #1

leo는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.


예제 #2

vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.


예제 #3

mislav는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.


풀이


1
2
3
4
5
6
7
import collections
 
def solution(participant, completion):
    answer = ''
    answer = collections.Counter(participant) - collections.Counter(completion)
    answer = list(answer.keys())[0]
    return answer
cs

  • participant 에서 나온 명단과 completion  에서 나온 명단을 비교한다.
  • collection 모듈의 Counter 은 입력값에 대해 중복 여부를 체크하여 {"입력값" : 중복 횟수}를 리턴한다.
  • collection 모듈의 Counter 은 각 요소끼리 뺄 수 있다.
  • 뺀 후에 남은 값을 list 로 가져와 key 값을 출력한다. (이 때 0번째인 이유는 우선, completion의 길이가 participant 길이보다 1이 작기에 가능한 것이다.)






출처 : https://programmers.co.kr/learn/courses/30/lessons/42576

'코딩테스트 연습 > Python' 카테고리의 다른 글

[leve1] 자릿수 더하기  (0) 2017.12.01
[leve1] x 만큼 간격이 있는 n개의 숫자  (0) 2017.11.30
[leve1] 딕셔너리 정렬  (0) 2017.11.30

문제


sum_digit함수는 자연수를 전달 받아서 숫자의 각 자릿수의 합을 구해서 return합니다. 예를들어 number = 123이면 1 + 2 + 3 = 6을 return하면 됩니다. sum_digit함수를 완성해보세요.


풀이


1
2
3
4
5
6
def sum_digit(number):
    '''number의 각 자릿수를 더해서 return하세요'''
    return sum([int(i) for i in str(number)])
        
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : {}".format(sum_digit(123)));
cs


  • str(number) 을 통하여 받은 숫자를 문자열로 변환 : 각 자리를 세기 위하여
  • for i i str(number)을 통해 가져온 것은 '1', '2', '3' 이라는 문자일  뿐이므로 int 형으로 바꿔주기 위하여 int (i)를 통해 변환해준다.
  • sum 함수를 사용하여 가져온 수를 더한다.

짧게 풀이해보자는 마음으로 했기에 각 방법은 여러가지 풀이가 나올 수 있다.

sum 함수의 사용 대신 for 문안에서 int(i) 로서 각각 더하게 만드는  방법도 있다.


1
2
3
sum = 0
for i in str(number):
    sum = sum+int(i)
cs


이런식으로 하는데 주의할 점은 number 을 문자열로 했으니 다시 int 형으로 바꿔줘야 한다는 것이다.


문제


number_generator함수는 x와 n을 입력 받습니다. 2와 5를 입력 받으면 2부터 시작해서 2씩 증가하는 숫자를 5개 가지는 리스트를 만들어서 리턴합니다. [2,4,6,8,10]

4와 3을 입력 받으면 4부터 시작해서 4씩 증가하는 숫자를 3개 가지는 리스트를 만들어서 리턴합니다. [4,8,12]

이를 일반화 하면 x부터 시작해서 x씩 증가하는 숫자를 n개 가지는 리스트를 리턴하도록 함수 number_generator를 완성하면 됩니다.


풀이


1
2
3
4
5
6
7
def number_generator(x, n):
    # 함수를 완성하세요
    answer = list(range(x, (x*n)+1, x))
    return answer
 
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(number_generator(3,5))
cs


  • 입력받은 수만큼의 증가하는 코드를 만든다.
  • list 함수는 받은 값을 리스트로 만들어 리턴하여 준다.
  • range(시작 값, 끝 값, 증가 값) 즉, range(x, (x*n)+1, x) 는 x 부터 시작하여 (x*n)+1 까지 x 만큼 증가하는 숫자들을 갖게 해준다.
  • (x*n)+1 에서 +1 이 붙는 이유 = if 문에서 range 를 0부터 시작하듯이 여기서도 0부터 시작하여 출력하기  때문에 그저 x*n 만 하면 0부터 (x*n)-1 값까지만 출력되기에 +1 을 해줘야 한다.
  • return 으로 바로 해줘도 되지만 값으로 받아서 해도 가능하다.


'코딩테스트 연습 > Python' 카테고리의 다른 글

[level1] 완주하지 못한 선수  (0) 2020.04.17
[leve1] 자릿수 더하기  (0) 2017.12.01
[leve1] 딕셔너리 정렬  (0) 2017.11.30

문제


딕셔너리는 들어있는 값에 순서가 없지만, 키를 기준으로 정렬하고 싶습니다. 그래서 키와 값을 튜플로 구성하고, 이를 순서대로 리스트에 넣으려고 합니다. 예를들어 {"김철수":78, "이하나":97, "정진원":88}이 있다면 각각의 키와 값을

  • ("김철수", 78)
  • ("이하나", 97)
  • ("정진원", 88)
과 같이 튜플로 분리하고 키를 기준으로 정렬해서 다음과 같은 리스트를 만들면 됩니다. [ ("김철수", 78), ("이하나", 97), ("정진원", 88) ]

다음 sort_dictionary 함수를 완성해 보세요.



풀이


1
2
3
4
5
6
7
def sort_dictionary(dic):
    '''입력받은 dic의 각 키와 값을 튜플로 만든 다음, 키 값을 기준으로 정렬해서 리스트에 넣으세요.
     그 리스트를 return하면 됩니다.''' 
    return sorted(dic.items())
 
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( sort_dictionary( {"김철수":78"이하나":97"정진원":88} ))
cs


  • dictionary 함수는 key : value 의 한 쌍으로 이루어져 있다.
  • items 함수는 key 와 value 의 쌍을 튜플로 묶어 그 값을 dict_items 라는 객체로 반환한다.
  • sorted(dic) 경우 dictionary 를 sort 하면 기본적으로 key 를 기준으로 정렬 된다. (출력 시 key 만 보이게 됨)
  • sorted(dic.items()) 는 items() 라는 함수에 의해 튜플 항목들로 이루어져 있어 key : value 둘 다 볼 수 있다. (출력 시 key 기준 정렬)


Value 기준 정렬 경우


sorted(dic.items(), key = lamda i : i[1]) 로 하여 value 기준으로 정렬이 가능하다

i = dic.items() 튜플 = ['key', 'value']

i[0] = 'key'

i[1] = 'value'

고로 i[1] 기준으로 정렬하기 위한 조건 = value 기준의 정렬

+ Recent posts