본문 바로가기

Algorithm272

[ 파이썬(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.
[ 파이썬(python) ] 프로그래머스 level1 - 두 정수 사이의 합 📌 두 정수 사이의 합 💡 나의 풀이 문제를 보고 3가지 경우의 수를 판단했다. a == b a b sum(range())를 사용하면 간편하게 줄일 수 있었는데, 무심코 반복문을 사용해서 효율성을 극대화시키지 못할 뻔했다. a가 b보다 크면, swap처리를 해준다. 이후, sum(range())를 사용하여 값을 계산해준다. a와 b가 같으면, 0아니야? 라고 할 수도 있지만 마지막 값은 +1을 해줬기 때문에 입력값 그대로 리턴되는것을 알 수 있다. def solution(a, b): if a > b: a, b = b, a return sum(range(a, b+1))) 2021. 3. 31.
[ 파이썬(python) ] 프로그래머스 level1 - 소수판별 📌 소수 판별 기존에 나동빈 - 이코테 책에서 봤던 유형이었는데, 소수문제에는 2가지 유형이 있다. 입력값이 단순히 소수인지 판별할 때 입력 구간에서 소수값 출력 이 문제는 2번 유형에 가까운 문제였다. 1부터 n까지의 소수의 개수를 구하는 문제기 때문이다. 정답을 제출하고 다른사람의 코드를 보는데 신기한 코드가 있었다. set을 활용해서 반복문을 돌때마다 i의 배수만큼 빼주는 코드가 있었다. 코드도 파이써닉했는데, 한눈에 이해가 되고 깔끔했다. 앞으로 이렇게 코드를 작성하도록 노력해야겠다. 💡 나의 풀이 에라토스테네스의 체를 이용해 풀었다. 여기서 반복문의 범위를 2부터 제곱근까지 선언한 이유는 약수의 특징을 이용했는데, 예를 들어 10은 가운데 약수를 기준으로 대칭적으로 2개씩 앞뒤로 묶어서 곱하면 .. 2021. 3. 31.
[ 파이썬(python) ] 프로그래머스 level1 - 문자열 다루기 기본 📌 문자열 다루기 기본 문제 설명에서 나온 조건은 무조건 사용하자. 💡 나의 풀이 숫자로만 구성되어있는지 확인하면 되는 문제라서 문자열만 들어있는 변수를 따로 만들고, 만약 input에 문자열이 포함되어있으면 return False를 하는 방법으로 만들었다. 한 가지 헷갈린 점이 있었다. 문제 설명에 s의 길이가 4 혹은 6이라고 주어졌는데 제한 사항에도 s는 길이 1이상, 길이 8이하인 문자열이라고 적혀있었다. 처음에는 문제가 잘못 나온 줄 알았는데, 생각해보니까 입력은 1~8까지 주어지는데 출력해야하는 문자열의 길이는 4 혹은 6 이라는 얘기였다. 즉, 문자열이 4와 6일때만 함수를 실행하면 된다. 그래서 나는 len(s) != 4 and len(s) != 6:으로 풀었는데 해석하자면 s의 길이가 모.. 2021. 3. 31.