[내배캠 AI코스] TIL

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

띵제 2024. 3. 20. 20:39

1. 문자열을 정수로 변환하기

def solution(n_str):

    return int(n_str)

 

2. 문자열의 뒤의 n글자

def solution(my_string, n):

    return my_string[-n:]

 

다른사람의 풀이

1)

solution = lambda my_string, n:my_string[len(my_string)-n:]

굳이 어렵게

 

2)

def solution(my_string, n):

    length=len(my_string)-n

    answer = my_string[length:]

    return answer

굳이 어렵게 22

 

3. 문자열로 변환

def solution(n):

    return str(n)

 

다른사람의 풀이

1)

def solution(n):

    answer = f'{n}'

    return answer

 

 

4. n번째 원소부터

def solution(num_list, n):

    return num_list[(n-1):]

 

다른사람의 풀이

1)

solution=lambda x,y:x[y-1:]

 

2)

def solution(num_list, n):

    answer = []

    for i in range(n-1,len(num_list)):

        answer.append(num_list[i])

    return answer

 

 

5. rny_string

def solution(rny_string):

    return rny_string.replace("m","rn")

 

다른사람의 풀이

1)

def solution(rny_string):

    answer = []

    for x in rny_string:

        if x=='m': answer.append('rn')

        else: answer.append(x)

    return ''.join(answer)

 

2)

def solution(rny_string):

    return "".join([(lambda x:"rn" if x == "m" else x)(x) for x in rny_string])

 

6. 수의 연산값 비교하기

def solution(a, b):

        x = int(str(a)+str(b))

        y = 2*a*b

    return max(x,y)

 

에러남

 

return max(x,y)

                       ^

IndentationError: unindent does not match any outer indentation level

 

수정한 코드

 

def solution(a, b):

        x = int(str(a)+str(b))

        y = int(2*a*b)

        return max(x,y)

 

7. 수 조작하기1

def solution(n, control):

    answer = n

    for i in control:

        if i == "w":

            answer+=1

        elif i == "s":

            answer-=1

        elif i == "d":

            answer+=10

        elif i == "a":

            answer-=10

        return answer

 

출력값이 틀렸다. 왜 틀렸지.. 왜 계산을 못하니!!

 

def solution(n, control):

    answer = n

    for i in control:

        if i == "w":

            answer+=1

        elif i == "s":

            answer-=1

        elif i == "d":

            answer+=10

        elif i == "a":

            answer-=10

        

    return answer

 

다른사람의 풀이

1)

def solution(n, control):

    key = dict(zip(['w','s','d','a'], [1,-1,10,-10]))

    return n + sum([key[c] for c in control])

 

2)

def solution(n, control):

 

    control_dict = {'w' : "1" , 's' : "-1", 'd' : "10", 'a' : "-10"}

 

    return eval("+".join(control_dict[letter] for letter in control)) + n

 

3)

def solution(n, control):

    four = {"w":1, "s":-1, "d":10, "a":-10}

    return n + sum([four[i] for i in control])

 

4)

def solution(n, control):

    controlLen = len(control);

    controlObj = {

        "w": 1,

        "s": -1,

        "d": 10,

        "a": -10

    };

 

    if (n >= -100000 and n <= 100000) and (controlLen >= 1 and controlLen <= 100000):

        for c in control:

            n += controlObj[c];

    return n;

 

 

8. 정수 찾기

def solution(num_list, n):

    if n in num_list: return 1 

    else: return 0

 

다른사람의 풀이

1)

def solution(num_list, n):

    return int(n in num_list)

ㄴ False = 0, True = 1

 

2)

def solution(num_list, n):

    if n in num_list: return 1

    return 0

 

3)

def solution(num_list, n):

    return [0,1][n in num_list]

 

 

9. 홀짝 구분하기

a = int(input())

if a%2==0:

    print(a, 'is even')

else :

    print(a, 'is odd')

 

다른사람의 풀이

1)

a = int(input())

 

if a % 2 == 0:

    print(f'{a} is even')

else:

    print(f'{a} is odd')

 

2)

N = int(input())

print(f"{N} is {'even' if N % 2 == 0 else 'odd'}")

 

3)

a=input()

print(f"{a} is {['even','odd'][int(a)%2]}")

 

 

10. 뒤에서 5등까지

def solution(num_list):

    num_list.sort()

    return num_list[:5]

 

다른사람의 풀이

1)

def solution(num_list):

    return sorted(num_list)[:5]

 

2)

def solution(num_list):

    answer = []

    for i in range(5):

 

        answer.append(min(num_list))

        num_list.remove(min(num_list))

    return answer

 

3)

solution = lambda l: sorted(l)[:5]

 

11. 문자열 붙여서 출력하기

str1, str2 = input().strip().split(' ')

print(str1+str2)

 

다른사람의 풀이

1)

print(input().strip().replace(' ', ''))

 

2)

str1, str2 = input().strip().split(' ')

print(str1, str2, sep='')

 

3)

print(''.join(input().strip().split(' ')))

 

12. 대문자로 바꾸기

def solution(myString):

    return myString.upper()

 

다른사람의 풀이

1)

def solution(myString):

    answer = ''

    for i in myString:

        if i.islower:

            answer += i.upper()

        else:

            answer += i

 

 

    return answer

 

2)

solution = lambda n : n.upper()

 

3)

def solution(myString):

    return ''.join(c.upper() for c in myString)

 

13. 더 크게 합치기

def solution(a, b):

    return max(int(str(a)+str(b)), int(str(b)+str(a)))

 

다른사람의 풀이

1)

def solution(a, b):

    return int(max(f"{a}{b}", f"{b}{a}"))

 

2)

def solution(a, b):

    a,b=str(a),str(b)

    return max(int(a+b), int(b+a))

 

14. 홀짝에 따라 다른 값 반환하기

def solution(n):

    if n%2 == 1:

        for i in range(1,n):

            if i%2==1:

                n+=i

            return n

    elif n%2 ==0:

        for i in range(1,n):

            if i%2==0:

                n+=(i**2)

            return n

 

계산이 틀림. 

<GPT>

주어진 코드의 문제점은 반복문 내에서 return 문이 사용된 부분입니다. return 문이 반복문 내에 있기 때문에 반복문이 실행된 후에 함수가 즉시 종료되어버립니다. 따라서 반복문을 모두 실행하고 후에 결과를 반환해야 합니다.

 

def solution(n):

    if n % 2 == 1:

        result = 0

        for i in range(1, n + 1, 2):  # 홀수인 경우

            result += i

        return result

    else:

        result = 0

        for i in range(2, n + 1, 2):  # 짝수인 경우

            result += i ** 2

        return result

 

<GPT 추가설명>

range(1, n) 1부터 n-1까지의 범위를 생성합니다. , n 포함하지 않습니다. range(1, n + 1, 2) 1부터 n까지의 범위를 생성하되, 숫자 사이의 간격이 2 증가하는 것을 의미합니다. , 홀수만을 포함하는 범위입니다. 따라서 짝수의 합을 구할 때는 range(2, n + 1, 2) 사용해야 합니다.

 

 

다른사람의 풀이

1)

def solution(n):

    return sum(x ** (2 - x % 2) for x in range(n + 1) if n % 2 == x % 2)

 

2)

def solution(n):

    if n%2:

        return sum(range(1,n+1,2))

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

 

3)

def solution(n):

    answer = 0

    if n%2:

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

            answer += i

    else:

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

            answer += i**2

    return answer

 

15. 카운트 업

def solution(start_num, end_num):

    num_list = list(range(0,51))

    return num_list[start_num:(end_num+1)]

 

다른사람의 풀이

1)

def solution(start, end):

    return list(range(start, end + 1))

 

2)

def solution(start, end):

    return [i for i in range(start,end+1)]

 

3)

def solution(start, end):

    answer = []

    while start<=end:

        answer.append(start)

        start+=1

    return answer

 

4)

solution = lambda start, end: [i for i in range(start, end+1)]

 

 

16. n의 배수 고르기

def solution(n, numlist):

    answer = []

    for i in numlist:

        if i%n == 0:

            answer.append(i)

    return answer

 

다른사람의 풀이

1)

def solution(n, numlist):

    answer = [i for i in numlist if i%n==0]

    return answer

 

2)

def solution(n, numlist):

    return list(filter(lambda v: v%n==0, numlist))

 

17. n번째 원소까지

def solution(num_list, n):

    return num_list[:n]

 

다른사람의 풀이

1)

def solution(num_list, n):

    return [v for i,v in enumerate(num_list) if i<n]

 

18. 조건에 맞게 수열 변환하기 3

def solution(arr, k):

    answer = []

    if k%2 == 1:

        for i in arr:

            answer.append(i*k)

    elif k%2 == 0:

        for i in arr:

            answer.append(i+k)

    return answer

 

다른사람의 풀이

1)

def solution(arr, k):

    return [i*k if k%2!=0 else i+k for i in arr]

 

2)

def solution(arr, k):

    if k % 2 != 0:

        return list(map(lambda x: x * k, arr))

 

    return list(map(lambda x: x + k, arr))

 

3)

def solution(arr, k):

 

    if k%2==0:

        return [a+k for a in arr]

    else: 

        return [a*k for a in arr] 

 

19. 조건에 맞게 수열 변환하기 1

def solution(arr):

    answer = []

    for i in arr:

        if i >= 50 and i%2 ==0: 

            answer.append(i/2)

        elif i<50 and i%2 ==1: 

            answer.append(i*2)   

    return answer

 

실행한 결괏값 [2,6,50,49] 기댓값 [2,2,6,50,99,49] 다릅니다.

 

def solution(arr):

    answer = []

    for i in arr:

        if i >= 50 and i%2 ==0: 

            answer.append(i//2)

        elif i<50 and i%2 ==1: 

            answer.append(i*2) 

        else: answer.append(i)

    return answer

 

다른사람의 풀이

1)

def solution(arr):

    for i in range(len(arr)):

        if arr[i] >= 50 and not arr[i] % 2:

            arr[i] //= 2

        elif arr[i] < 50 and arr[i] % 2:

            arr[i] *= 2

 

    return arr

 

20. n보다 커질 때까지 더하기

def solution(numbers, n):

    answer = 0

    for i in numbers:

        answer+=i

        if answer > n:

            break

    return answer

 

다른사람의 풀이

1)

def solution(numbers, n):

    return next(sum(numbers[:i + 1]) for i in range(len(numbers)) if sum(numbers[:i + 1]) > n)

 

2)

def solution(numbers, n):

    answer = 0

    i=0

    while answer<=n:

        answer+=numbers[i]

        i+=1

    return answer