프로그래머스 코딩테스트 연습

ddalkigum·2020년 12월 11일
0

알고리즘

목록 보기
11/15
post-thumbnail

완주하지 못한 선수

문제

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

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와
완주한 선수들의 이름이 담긴 배열 completion이 주어질 때,
완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

풀이

def solution(participant, completion):
    answer =""
    participant.sort()
    completion.sort()

    if len(completion) == 0:
        answer = ""
    else:
        for i in range(len(participant)-1):
            if participant[i] != completion[i]:
                answer = participant[i]
                break
            else:
                answer = participant[-1] 
    return answer
  1. 둘을 정렬
  2. 완주 선수 하지 못한 선수가 없다 = 출전 선수가 한명이다
  3. 정렬한 리스트에서 이름이 다른 선수가 나온다 = 완주하지 못한 선수
  4. 정렬이 일치한다 = 이름이 제일 끝에 있는 선수

이 4가지 조건으로 문제를 풀었다
처음 시도했을때는, 출전선수가 한명이 었을때를 생각하지 못하고
계속 시도했고, 질문 칸에 들어가서 많은 분들이 남겨놓은 예제들을 넣어가면서
답을 찾았다


2016년

문제

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?
두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수,
solution을 완성하세요.
요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다.
예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 TUE를 반환하세요.

풀이

def solution(a, b):
    from datetime import date
    answer = date(2016,a,b).strftime('%a').upper()
    return answer

문제를 보고 이건 datetime 함수가 생각났고,
바로 찾아봤다

예전에 써본적이 있어서 금방 찾앗고, 금방 풀었던 문제다


가운데 글자 가져오기

문제

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

풀이

def solution(s):
    answer=""
    for word in range(int(len(s)/2)+1):
        if len(s)%2 ==0:
            if word == int(len(s)/2):
                answer = (s[word-1]+ s[word])
        else:
            if word == int(len(s)/2):
                answer = (s[word])
    return answer

가운데까지 오기위해서는 딱 절반까지만 구해주면 되기 때문에
나눠서 범위를 정해줬고,

남는 숫자가 홀수인가 짝수인가에따라서 두가지로 나누어진다.

각각 경우에 따라서 구해줬다

헷갈렷던 부분이 있다면, answer이 짝수일때,
단어 범위를 어디서 가지고 와야할지?


주식가격

문제

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때,
가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

풀이

def solution(prices):
    answer = [0]* len(prices)
    for i in range(len(prices)):
        second = 0
        for j in range(i+1, len(prices)):
            if prices[i] <=  prices[j]:
                second += 1
            else:
                second += 1
                break
        answer[i] = second
    return answer

이 문제는 문제 이해를 못해서 애좀 먹엇다

주식가격이 떨어지지 않는다는게 무슨뜻이지...??

문제에 대한 설명이라면

이 문제에 나와있는 예제처럼

[1, 2, 3, 2, 3] 이라면

1 과 2 = 주식가격 오름
2 와 3 = 주식가격 오름
3 과 2 = 주식가격 떨어짐
.
.
.

이런식으로 진행이 되는데 처음 시작하는 경우 1보다 작은 숫자가 없기
때문에 1은 주식가격이 떨어지지 않고 오르기만 하는 경우다

첫 시작을 0초로 잡아준 이유는
다음 숫자로 넘어 갈때 무조건 1초는 흘러가는 상황이기 때문에
둘다 1초를 더해주기 위해서 0으로 잡고 시작


개인적인 생각이긴 하지만, 프로그래머스의 문제는 재밌다
백준이 수학의 정석같은 거면, 프로그래머스는 책보는 느낌이다

지금은 1단계, 2단계 문제를 풀어보면서 있는데
여기서도 막히는 부분이 많다

최근에 공부했던 FCFS에서 나왓던 그림이랑 비슷한게 보였는데
다리위를 지나는 트럭 이라는 문제였는데

이 문제를 풀때 사용하는 알고리즘이 여기에 쓰이는건가?
생각이 들었고, 아직 풀지는 못햇다...

내일 다시 도전해봐야지
오늘은 과부하 걸려서.... 🐒

profile
딸기검 -본캐🐒 , 김준형 - 현실 본캐 🐒

0개의 댓글