[내배캠 AI코스] TIL

내일배움캠프 16일차 TIL - 코드카타 문제들②

띵제 2024. 3. 19. 20:38

1. 정수 부분

import math

 

def solution(flo):

    return math.trunc(flo)

 

다른 사람의 풀이

1)

def solution(flo):

    return flo//1

 

2)

def solution(flo):

    return int(flo)

 

2. n의 배수

def solution(num, n):

    if num%n == 0:

        return 1

    else:

        return 0

 

다른 사람의 풀이

1)

def solution(num, n):

    return int(not(num % n))

 

2)

def solution(num, n):

    return int(num % n == 0)

 

3. 문자열 앞의 n글자

def solution(my_string, n):

    return my_string[:n]

 

다른 사람의 풀이

1)

def solution(my_string, n):

    ans_str = ''

    ans_arr = []

    i = 0

    while i < n :

        ans_arr.append(my_string[i])

        i += 1

    return ans_str.join(ans_arr)

 

2)

solution = lambda a,b : a[0:b]

 

4. 이어 붙인 수

파이썬 리스트 순서 뒤집기

 

def solution(num_list):

    num_list.reverse()

    x = 0

    y = 0

    z = 0

    for i in num_list:

        x += 1

        if i%2 == 0:

            y = y + i*(10**x)

        elif i%2 == 1:

            z = z + i*(10**x)

            

    return y+z

 

>> 실행은 되는데 계산한 값이 정답이랑 다름.. 답은 581이 나와야 하는데 내가 쓴대로 풀면 57830이 나옴ㅠ

 

def solution(num_list):

    num_list.reverse()

    a = 0 

    b = 0

    x = 0 

    y = 0

    for i in num_list:

        if i%2 == 0:

            a += 1

            x = x + i*(10**(a-1))

        elif i%2 == 1:

            b += 1

            y = y + i*(10**(b-1))

            

    return x+y

 

다른 사람의 풀이

1)

def solution(num_list):

    answer = 0

    a=""#홀수

    b=""#짝수

    for i in num_list:

        if i%2!=0:

            a+=str(i)

        else:

            b+=str(i)

    return int(a)+int(b)

 

2)

def solution(num_list):

    return int(''.join([str(x) for x in num_list if x % 2])) + int(''.join([str(x) for x in num_list if not x % 2]))

 

3)

def solution(num_list):

    odd=''

    even=''

    for i in num_list:

        if i%2!=0:

            odd+=str(i)

        else:

            even+=str(i)

    return eval(odd+'+'+even)

 

5. flag에 따라 다른 값 반환하기

def solution(a, b, flag):

    if flag is true:

        return a+b

    elif flag is false:

        return a-b

 

NameError: name 'true' is not defined

...?

 

블로그 참고

 

def solution(a, b, flag):

    bool_flag = bool(flag)

    if bool_flag == 1:

        return int(a+b)

    else:

        return int(a-b)

    return bool_flag

 

다른 사람의 풀이

1)

def solution(a, b, flag):

    if flag: 

    return a+b

     return a-b

 

2)

def solution(a, b, flag):

    return a + b * (2 * int(flag) - 1)

 

3)

solution=lambda a,b,f:[a-b,a+b][f]

 

4)

def solution(a, b, flag):

    return a - b + 2 * b * flag

 

6. 길이에 따른 연산

from math import prod

 

def solution(num_list):

    if len(num_list)>10:

        return sum(num_list)

    elif len(num_list)<=10:

        return prod(num_list)

 

다른 사람의 풀이

1)

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))))

 

2)

from functools import reduce

def solution(l):

    return sum(l) if len(l)>=11 else reduce(lambda a,b: a*b, l)

 

 

7. 소문자로 바꾸기

def solution(myString):

    return myString.lower()

 

다른 사람의 풀이

1)

def solution(myString):

    answer = ""

    for i in myString:

        if ord(i) < 95:

            i = ord(i) + 32

            answer += str(chr(i))

        else:

            answer += i

 

    return answer

 

8. 원소들의 곱과 합

from math import prod

 

def solution(num_list):

    if prod(num_list)<(sum(num_list))**2:

        return 1

    else:

        return 0

 

다른 사람의 풀이

1)

def solution(num_list):

    s=sum(num_list)**2

    m=eval('*'.join([str(n) for n in num_list]))

    return 1 if s>m else 0

 

2)

def solution(num_list):

    a=1

    b=0

    for x in num_list:

        a*=x

        b+=x

    if a<b*b: return 1

    return 0

 

3)

from functools import reduce

 

def solution(num_list):

    return 1 if (reduce(lambda x, y: x * y, num_list)) < (sum(num_list) ** 2) else 0

 

 

9. 문자열 곱하기

def solution(my_string, k):

    return my_string*k

 

10. 공배수

def solution(number, n, m):

    if number%n==0 and number%m==0:

        return 1

    else:

        return 0

 

다른 사람의 풀이

1)

def solution(number, n, m):

    return int(bool(number % n == 0) & bool(number % m == 0))

 

2)

def solution(number, n, m):

    return int(number%n == 0 and number%m == 0)

 

11.세균 증식

def solution(n, t):

    return n*(2**t)

 

다른 사람의 풀이

1)

def solution(n, t):

    return n << t

 

12. 삼각형의 완성조건(1)

def solution(sides):

    a = sides[0]

    b = sides[1]

    c = sides[2]

    if a<b+c and b<a+c and c<a+b:

        return 1

    else:

        return 2

 

뭔가 무식한 방법 같지만 일단 해냄

 

다른 사람의 풀이

1)

def solution(sides):

    return 1 if max(sides) < (sum(sides) - max(sides)) else 2

 

내가 하고 싶었던 게 딱 이거

 

2)

def solution(sides):

    sides.sort()

    return 1 if sides[0]+sides[1]>sides[2] else 2

 

 

13. 중앙값 구하기

def solution(array):

    return array[(len(array)/2+1)]

 

TypeError: list indices must be integers or slices, not float

 

def solution(array):

    return array[int(len(array)//2+1)]

 

코드는 완성, 문제가 틀림. 아 또 왜

 

def solution(array):

    array.sort()

    return array[len(array)//2]

 

 

14. 짝수는 싫어요

def solution(n):

    a = []

    b = []

    for i in range(1,n):

        if i%2 == 1:

            a.append(i)

        else:

            b.append(i)

    retrun a

 

오류남

 

a SyntaxError: invalid syntax

 

짜증나

 

def solution(n):

    return [i for i in range(1, n+1, 2)]

 

 

다른 사람의 풀이

1)

def solution(n):

    answer = []

 

    for i in range(1, n + 1):

        if i % 2 == 1:

            answer.append(i)

 

    return answer

 

아 내가 이렇게 할려고 했던건데..!

굳이 else를 쓸 필요가 없구나?

 

15. 순서쌍의 개수

def solution(n):

    answer = []

    for i in range(1,n+1):

        if n % i == 0:

            answer.extend([(i, n//i)])

    return len(answer) 

 

다른 사람의 풀이

1)

def solution(n):

    return len(list(filter(lambda v: n % (v+1) == 0, range(n))))

 

2)

def solution(n):

    return len([number for number in range(1, n+1) if n%number == 0])

 

3)

def solution(n):

    answer = 0

    for i in range(1, int(n ** 0.5) + 1):

        if n % i == 0:

            answer += 2

 

            if i * i == n:

                answer -= 1

 

    return answer

 

6. 모음 제거

def solution(my_string):

    vowel = ['a', 'e', 'i', 'o', 'u']

    

    for i in vowel:

        if i in my_string:

            my_string = my_string.replace(i, '')

    

    return my_string

 

다른 사람의 풀이

1)

def solution(my_string):

    return "".join([i for i in my_string if not(i in "aeiou")])

 

2)

def solution(my_string):

    answer = ''

 

    for c in my_string:

        if c in ['a', 'e', 'i', 'o', 'u']:

            continue

        answer += c

 

    return answer

 

3)

import re

 

def solution(my_string):

    return re.sub(r"a|e|i|o|u", "", my_string)

 

17. 문자 반복 출력하기

def solution(my_string, n):

    answer = []

    for i in my_string:

        answer.append(i * n)

    return ''.join(answer)

 

다른 사람의 풀이

1)

def solution(my_string, n):

    return ''.join(i*n for i in my_string)

 

2)

def solution(my_string, n):

    answer = ''

 

    for c in list(my_string):

        answer += c*n

    return answer

 

18. 옷가게 할인 받기

def solution(price):

    if price >= 100000 and price<300000:

        answer = price*0.95

    elif price >=300000 and price<500000:

        answer = price*0.90

    elif price >=500000:

        answer = price*0.80

        

    return answer

 

>>코드 실행은 . 그러나 제출하면 런타임 에러

 

def solution(price):

    if price >= 100000 and price<300000:

        return int(price*0.95)

    elif price >=300000 and price<500000:

        return int(price*0.90)

    elif price >=500000:

        return int(price*0.80)

    else:

        return price

 

다른 사람의 풀이

1)

def solution(price):

    discount_rates = {500000: 0.8, 300000: 0.9, 100000: 0.95, 0: 1}

    for discount_price, discount_rate in discount_rates.items():

        if price >= discount_price:

            return int(price * discount_rate)

 

2)

def solution(price):

    return (100 - len([1 for k in [100000, 300000, 500000, 500000] if k<=price])*5) * price // 100

 

19. 제곱수 판별하기

import math

 

def solution(n):

    a = math.sqrt(n)

    if n%a == 0:

        return 1

    elif n%a !=0:

        return 2

 

다른 사람의 풀이

1)

def solution(n):

    return 1 if (n ** 0.5).is_integer() else 2

 

2)

def solution(n):

    if n**(1/2) == int(n**(1/2)) :

        return 1

    else :

        return 2

 

3)

def solution(n):

    for i in range(1,n):

        if n == i * i:

            return 1

    return 2

 

20. 숨어있는 숫자의 덧셈(1)

import re

 

def solution(my_string):

    numbers = re.findall('\d', my_string)

    return sum(numbers)

 

TypeError: unsupported operand type(s) for +: 'int' and 'str'

>>int 형을 str 형과 + 연산자로 더할 없다

 

import re

 

def solution(my_string):

    answer = []

    numbers = re.findall('\d', my_string)

    return answer.append(str(numbers))

 

>>결과값이 자꾸 null ..

 

블로그 뒤짐.

 

import re

 

def solution(my_string):

    answer = []

    numbers = re.findall('\d', my_string)

    total = 0

    for num in numbers:

        total += int(num)

    return total

 

다른 사람의 풀이

1)

def solution(my_string):

    return sum(int(i) for i in my_string if i.isdigit())

 

2)

def solution(my_string):

    answer = 0

    for i in my_string:

        try:

            answer = answer + int(i)

        except:

            pass

 

    return answer

 

3)

def solution(my_string):

    return sum(map(int, filter(lambda x: x.isdigit(), my_string)))