[프로그래머스] 짜잘한 Lv.1 문제 모음 (2) (Python)

seulzzang·2022년 9월 20일
0

코딩테스트 연습

목록 보기
13/44
post-thumbnail

정답율은 85% 아래지만 아직은 간단한 프로그래머스 문제들 모음💻

1. 두 정수 사이의 합

[프로그래머스] Lv.1 두 정수 사이의 합

def solution(a, b):
    answer = 0
    # a와 b의 대소관계는 정해져있지 않습니다.
    if a > b:
        a, b = b, a  
    for i in range(a, b+1):
        answer += i
    return answer

💻다른사람 풀이 (1)

def adder(a, b):
    return (abs(a-b)+1)*(a+b)//2

절댓값이라는게 있단다 슬기야
이러면 바로 시간복잡도 O(1)ㅋㅋㅋㅋㅋㅋㅋ 내 코드는 O(N)이다.

💻다른사람 풀이 (2)

def adder(a, b):
    return sum(range(min(a,b),max(a,b)+1))

아니면 min, max를 이용해주면 된다!

2. 콜라츠 추측

[프로그래머스] Lv.1 콜라츠 추측

def solution(num):
    answer = 0
    cnt = 0
    
    while True:
        if cnt > 500:
            break
        if num == 1:
            break
        # 1-1
        if num % 2 == 0:
            num /= 2
            cnt += 1
        # 1-2
        else:
            num = num*3 + 1
            cnt += 1
            
    if cnt > 500:
        return -1
    else: 
        return cnt

순서대로 조건문 작성해주면 끝

3. 나머지가 1이 되는 수 찾기

[프로그래머스] Lv.1 나머지가 1이 되는 수 찾기

def solution(n):
    answer = 0
    arr = []
    for i in range(1, n+1):
        if n % i == 1:
            arr.append(i)
    answer = min(arr)
    return answer

나처럼 최솟값을 찾아주거나 걍 0번째 인덱스를 출력하면 된다.

4. 서울에서 김서방 찾기

[프로그래머스] Lv.1 서울에서 김서방 찾기

def solution(seoul):
    answer = ''
    kim_num = 0
    for i in range(len(seoul)):
        if seoul[i] == 'Kim':
            kim_num = i
    answer = '김서방은 {}에 있다'.format(kim_num)
    return answer

💻다른사람 풀이

def findKim(seoul):
    return "김서방은 {}에 있다".format(seoul.index('Kim'))

index란게 있단다 슬기야...

5. 핸드폰 번호 가리기

[프로그래머스] Lv.1 핸드폰 번호 가리기

def solution(phone_number):
    answer = ''
    # 전화번호 뒷자리를 제외한 나머지 문자 전부
    for i in range(len(phone_number) - 4):
        answer += '*'
    answer = answer + phone_number[-4:]
    return answer

처음에 replcae를 사용하려다가.. 실패했다. 근데 생각해보니 replace 못쓴다.
그래서 그냥 길이에서 4개빼고 앞에 *붙여주고 뒤에 나머지 4자리를 붙여주는 식으로 코드를 짰다.

💻다른사람 풀이 (1)

def hide_numbers(s):
  return '*' * (len(s) - 4) + s[-4:]

문자열은 사칙연산이 가능하다.

💻다른사람 풀이 (2)

import re

def hide_numbers(s):
    p = re.compile(r'\d(?=\d{4})')
    return p.sub("*", s, count = 0)

정규식....

6. 나누어 떨어지는 숫자 배열

[프로그래머스] Lv.1 나누어 떨어지는 숫자 배열

def solution(arr, divisor):
    answer = []
    for ar in arr:
        if ar % divisor == 0:
            answer.append(ar)
    if answer == []:
        answer.append(-1)
    answer.sort()
    return answer

💻다른사람 풀이

def solution(arr, divisor): 
	return sorted([n for n in arr if n%divisor == 0]) or [-1]

이런 한줄 풀이 보면 황당하기만 하다..
or 쓰는 법 또 배워가욧~

7. 제일 작은 수 제거하기

[프로그래머스] Lv.1 제일 작은 수 제거하기

def solution(arr):
    if len(arr) > 1:
        arr.remove(min(arr))
        return arr
    else:
        return [-1]

💻다른사람 풀이

def rm_small(mylist):
    return [i for i in mylist if i > min(mylist)]

List Comprehension을 이용해준 것. 최솟값 이상인 것들만 반환해준다.
이게 최적의 풀이인듯 하다. 내 풀이 같은 경우 만약 [3, 2, 1, 1, 1]이럴경우 하나만 지워주니까..

8. 음양 더하기

[프로그래머스] Lv.1 음양 더하기

def solution(absolutes, signs):
    for i in range(len(absolutes)):
        if signs [i] == False:
            absolutes[i] = -absolutes[i]
    answer = sum(absolutes)
    return answer

💻다른사람 풀이

def solution(absolutes, signs):
    return sum(absolutes if sign else -absolutes for absolutes, sign in zip(absolutes, signs))

이렇게 한줄로 나타낼 수도 있다.

9. 가운데 글자 가져오기

[프로그래머스] Lv.1 가운데 글자 가져오기

def solution(s):
    if len(s) % 2 == 0:
        return s[int(len(s)/2-1) : int(len(s)/2+1)]
    else:
        return s[int(len(s)/2)]
profile
중요한 것은 꺾이지 않는 마음

0개의 댓글