본문 바로가기

Algorithm/Problems

[Programmers] Level 1(part. 2)

문제.

...더보기

문자열 내 마음대로 정렬하기.

문자형 자료가 담긴 리스트와 정수가 주어진다.

각 문자형 자료의 정수 번째 인덱스 글자를 기준으로 오름차순 정렬하여라.

인덱스 글자가 같은 경우, 사전순으로 앞선 문자열이 앞쪽에 위치하도록 하여라.

풀이.

def solution(input_list, input_num):
    sort_index = []
    for i in range(len(input_list)):
        sort_index.append((input_list[i][input_num], input_list[i]))
        
    sort_index.sort()
    _, result = zip(*sort_index)
    
    return list(result)

*zip의 활용

index 문자로 정렬하였을 때, 해당 문자열을 알기 쉽도록 튜플 형태로 두 값을 묶어주었습니다. 그 후, zip 을 활용하여 (인덱스 문자, 문자열)로 묶여 있는 값들에서 문자열들만 뽑아서 리스트로 만들어 주었습니다.

_, result = zip(*sort_index) 에서 _ 를 사용함으로써 필요 없어진 인덱스 문자는 받지 않고, 문자열 자료만 result 변수에 담았습니다.

 


문제.

...더보기

2016년(윤년) 1월 1일은 금요일이다. 

2016년  a월 b일은 무슨 요일인지 계산하는 함수를 구하라.

풀이.

def solution(month, date):
    day_list = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]
    date_list = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    
    day_count = sum(date_list[:month-1]) + date
    day = day_list[day_count % 7]
    
    return day

달력 문제입니다. 파이썬을 처음 접했을 때, 별찍기 문제와 같이 접했던 문제였는데, 당시에는 정말 너무 어려워서 풀이를 보고도 무슨 소린가 했었던 문제라 기억에 많이 남습니다.

알고리즘 문제를 풀다보면, 반복되는 데이터를 처리할 때 '나머지' 개념이 정말 많이 쓰이는 걸 확인할 수 있습니다. 몫과 나머지를 활용하는데 익숙해진다면 여러 문제들에 좀 더 쉽게 다가갈 수 있을 것 같습니다.

 


문제.

...더보기

참가자 명단이 담긴 리스트와 완주자 명단이 담긴 리스트가 주어진다.

단 한명의 선수만 완주를 하지 못했는데, 그 사람을 찾아내라. (이름만 찾아내면 되며, 참가자 중에는 동명이인이 있을 수 있다.)

풀이.

def solution(participant, completion):
    participant.sort()
    completion.sort()
    
    for i in range(len(completion)):
        if completion[i] != participant[i]:
            return participant[i]
    
    return participant[-1]

'Algorithm > Problems' 카테고리의 다른 글

[Programmers] 주식가격  (0) 2019.10.08
[Programmers] 영어 끝말잇기  (0) 2019.10.02
[Programmers] Level 1(part. 1)  (0) 2019.09.24
[Programmers] 체육복  (0) 2019.09.24
[백준] 11047번 - 동전 0  (0) 2019.09.17