본문 바로가기

프로그래머스25

[ 파이썬(python) ] 프로그래머스 level1 - 체육복 📌 체육복 체육복을 도난당한 학생에게 여벌의 체육복을 갖고있는 학생이 빌려주는 문제이다. n = 전체 학생, reserve = 여벌의 체육복이 있는 학생, lost = 체육복을 잃어버린 학생 💡 나의 풀이 문제에서는 각각의 학생을 key - value의 형태를 띄고있는 dictionary가 아닌, 리스트로 주어졌다. 전체 학생의 수가 5이면 n = [1, 2, 3, 4, 5] 또, 체육복을 빌려줄때는 바로 앞번호의 학생이나 뒷번호의 학생에게만 빌려 줄 수 있다고 했다. 그래서 index별로 값을 비교해서 나올수 있는 경우의 수를 분류했다. 여벌의 체육복을 빌려주는 경우의 수는 크게 2가지가 있다. lost가 reserve에 포함되지 않는 경우 reserve[i] == lost[j]+1이면 여벌의 체육복을.. 2021. 3. 31.
[ 파이썬(python) ] 프로그래머스 level1 - 약수의 합 📌 약수의 합 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하자. 💡 나의 풀이 약수를 구하는것엔 3가지 방법이 있다. 처음부터 n까지 약수 구하기 처음부터 n//2까지 약수 구하기 처음부터 int(n**0.5)까지 약수 구하기 이전에 소수 판별 문제를 풀었을 때 범위를 제곱근까지만 구해서 소수를 구했었는데, 이번에는 2로 나눈값으로 구했다. 약수의 주요 특징은 자신을 제외한 가장 큰 약수는 n//2다. 예를 들어 n = 12일때는 자신을 제외한 가장 큰 약수는 6이고(1, 2, 3, 4, 6, 12) n = 30일때는 자신을 제외한 가장 큰 약수는 15다.(1, 2, 3, 5, 6, 10, 15, 30) 이처럼 범위를 n // 2+1까지만 구해주고 자기 자신을 더해주면 문제에서 요구하는 n의 약.. 2021. 3. 31.
[ 파이썬(python) ] 프로그래머스 level1 - 2016년 📌 2016년 00월 00일처럼 날짜가 주어졌을 때 무슨요일인지 맞추는 문제이다. 처음에 생각한 방법은 1일부터 31일까지 쭉 나열하고 7일이 되면 한바퀴를 다 돌기때문에 7로 나눈 나머지가 0, 1, ... 7이면 해당요일을 출력하는 방법을 떠올렸다. 전체적인 방법은 벗어나지 않았지만, if문을 사용하지 않고 그냥 요일[날짜]처럼 작성하면 코드도 간결해진다. 그리고 1월의 요일만 구하는게 아니라 1월 ~ 12월의 요일도 구해야하므로 months라는 변수를 선언해 1~12월의 요일들을 리스트에 선언했다. 구하려고 하는 달(month)은 그 전까지의 달(month)의 합과 일(day)을 더한 값에 %7을 해주면 해당 요일이 나온다. def solution(a, b): months = [31, 29, 31,.. 2021. 3. 31.
[ 파이썬(python) ] 프로그래머스 level1 - 제일 작은 수 제거하기 📌 제일 작은 수 제거하기 arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수를 완성하라. 단, 리턴하려면 배열이 빈 배열일 경우 [-1]을 리턴하라. 💡 나의 풀이 가장 작은 수를 제거할 때는 다음과 같은 방법이 있다. sorted함수로 오름차순 / 내림차순으로 정렬한 뒤 맨 앞 / 뒤 원소를 제거하기 min함수로 제일 작은 값을 찾아 해당 원소만 제거(remove)하기 문제에서는 n의 범위가 주어지지 않았지만, 시간복잡도를 고려해서 2번으로 선택했다. sorted함수의 시간복잡도는 O(NlogN)이고, max/min 함수의 시간복잡도는 O(N)이기 때문이다. 자료구조 별 시간복잡도: 파이썬 공식문서 remove함수는 원소 제거 후 empty면 빈 배열을 반환한다. 다른사람은 comprehensio.. 2021. 3. 31.
[ 파이썬(python) ] 프로그래머스 level2 - 전화번호 목록 📌 전화번호 목록 배열안에 한 번호가 다른 번호에 포함되어있으면 False를, 포함되어있지 않다면 True를 반환하는 문제다. 💡 나의 풀이 결론적으로 완벽한 해답을 찾지 못했다. 😅 😅 첫번째는 현재값과 다음값을 비교하는 방법이었다. 배열을 정렬(sort)하고 if array[i] in array[i+1]을 생각했는데 정확성에서 100% 답이 아니었다. 왜냐면 현재 번호가 포함되어있는 다음 번호에서도 자릿수가 다른 경우(['11', '1211)가 있을 수 있기 때문이다. 질문하기를 보니까 예전에는 통과한 코드인데, 21.3.4.부로 테스트 케이스가 변경되면서 더 이상 통과하지 않는 코드가 되었다. 두번째는 해쉬(hash)값을 이용하는 방법이었다. for문으로 값을 하나하나씩 불러와.. 2021. 3. 31.