본문 바로가기
  • 머킹이의 머신로그
오늘부터 코딩테스트

[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 기초 프로그램 풀기

by 머킹 2023. 10. 20.
728x90

[파이썬] 프로그래머스 Lv0. 1로 만들기, 길이에 따른 연산, 원하는 문자열 찾기

안녕하세요 머킹입니다.

일주일 내내 감기를 앓고 살았는데...

벌써 주말이군요.... 왜 안 나을까요..?

 

그리고 이번 감기를 걸리고 나서 생각했는데

진짜 비염이신 분들은 정말 힘드실 것 같다는 생각을 했어요....


1로 만들기

 

문제 설명

정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.

 

10 / 2 = 5

(5 - 1) / 2 = 4

4 / 2 = 2

2 / 2 = 1

위와 같이 4번의 나누기 연산으로 1이 되었습니다.

 

정수들이 담긴 리스트 num_list가 주어질 때, 

num_list의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return 하도록 solution 함수를 완성해 주세요.

 

일단 num_list에 num들을 for문을 이용해서 반복하고,

그 안에서 if문을 쓰면 될 것 같습니다.

 

def solution(num_list):
    answer = 0
    for num in num_list:
        while num > 1:
            if num % 2 == 0:
                num = num // 2
            else:
                num = (num - 1) // 2
            answer += 1
            
    return answer
def solution(num_list):
    return sum(len(bin(i)) - 3 for i in num_list)

가장 추천을 많이 받은 코드인데

진짜 신기하네요.

밑에 달린 설명인데 이진수를 활용하다니... 대단합니다.

 


길이에 따른 연산

 

문제 설명

정수가 담긴 리스트 num_list가 주어질 때, 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을 10 이하이면 모든 원소의 곱을 return 하도록 solution 함수를 완성해 주세요.

 

이 문제는 곱하는 값을 리턴할 때 for문을 안에 또 쓰면 될 것 같습니다.

def solution(num_list):
    answer = 0

    if len(num_list) >= 11:
        answer = sum(num_list)
    else:
        answer = 1
        for num in num_list:
            answer *= num
    
    return answer
def solution(num_list):
    if len(num_list) >= 11:
        return eval('+'.join(list(map(str, num_list))))
    else:
        return eval('*'.join(list(map(str, num_list))))

다른 사람의 풀이에서 사용된 eval이라는 함수도 신기합니다.

"매개변수로 받은 expression (=식)을 문자열로 받아서, 실행하는 함수"라고 하는데

파이썬도 공부할게 끝이 없네요.

 

이번 주 주말에 파이썬 기초를 다시 천천히 보면서 개념을 알아야 할 것 같습니다.

 


원하는 문자열 찾기

 

문제 설명

알파벳으로 이루어진 문자열 myString과 pat이 주어집니다. 

myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요.

단, 알파벳 대문자와 소문자는 구분하지 않습니다.

 

코드를 열심히 짰는데 테스트를 하나 통과하지 못하길래 보니까

소문자 대문자 문제가 있었네요.

 

def solution(myString, pat):
    myString = myString.lower()
    pat = pat.lower()
    
    if pat in myString:
        return 1
    else:
        return 0
def solution(myString, pat):
    return int(pat.lower() in myString.lower())

이건 다른 사람들의 풀이입니다!

이렇게 쓸 수도 있네요.. 대박