알고리즘/프로그래머스

코딩 기초 트레이닝 2

요술공주밍키 2023. 7. 25. 16:01

이번에는 내가 작성한 코드와 제일 추천이 많은 풀이를 함께 넣어봐야겠다.

추천 풀이와 나의 풀이가 같다면 내 풀이만 올려둬야겠다.

 

나름 간결하게 적었다고 생각했는데 다른 사람들의 풀이를 보니 세상에는 대단한 사람들이

많다는 것을 느낀다....


문자열 섞기

문제 설명
길이가 같은 두 문자열 str1과 str2가 주어집니다.

두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.

제한사항
1 ≤ str1의 길이 = str2의 길이 ≤ 10
str1과 str2는 알파벳 소문자로 이루어진 문자열입니다.
입출력 예
str1 str2 result
"aaaaa" "bbbbb" "ababababab"


내 풀이

def solution(str1, str2):
    answer = ''
    for s1, s2 in zip(str1, str2):
        answer += s1
        answer += s2
    
    return answer

다른 풀이

def solution(str1, str2):
    answer = ''.join([str1[i] + str2[i] for i in range(len(str1))])
    return answer

문자 리스트를 문자열로 반환하기

문제 설명
문자들이 담겨있는 배열 arr가 주어집니다. arr의 원소들을 순서대로 이어 붙인 문자열을 return 하는 solution함수를 작성해 주세요.

제한사항
1 ≤ arr의 길이 ≤ 200
arr의 원소는 전부 알파벳 소문자로 이루어진 길이가 1인 문자열입니다.
입출력 예
arr result
["a","b","c"] "abc"


내 풀이

def solution(arr):
    return ''.join(arr)

문자열 곱하기

 

문제 설명
문자열 my_string과 정수 k가 주어질 때, my_string을 k번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요.

제한사항
1 ≤ my_string의 길이 ≤ 100
my_string은 영소문자로만 이루어져 있습니다.
1 ≤ k ≤ 100
입출력 예
my_string k result
"string" 3 "stringstringstring"
"love" 10 "lovelovelovelovelovelovelovelovelovelove"
입출력 예 설명
입출력 예 #1

예제 1번의 my_string은 "string"이고 이를 3번 반복한 문자열은 "stringstringstring"이므로 이를 return 합니다.
입출력 예 #2

예제 2번의 my_string은 "love"이고 이를 10번 반복한 문자열은 "lovelovelovelovelovelovelovelovelovelove"이므로 이를 return 합니다.


내 풀이

def solution(my_string, k):
    return my_string*k

더 크게 합치기

문제 설명
연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.

12 ⊕ 3 = 123
3 ⊕ 12 = 312
양의 정수 a와 b가 주어졌을 때, a ⊕ b와 b ⊕ a 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요.

단, a ⊕ b와 b ⊕ a가 같다면 a ⊕ b를 return 합니다.

제한사항
1 ≤ a, b < 10,000
입출력 예
a b result
9 91 991
89 8 898
입출력 예 설명
입출력 예 #1

a ⊕ b = 991 이고, b ⊕ a = 919 입니다. 둘 중 더 큰 값은 991 이므로 991을 return 합니다.
입출력 예 #2

a ⊕ b = 898 이고, b ⊕ a = 889 입니다. 둘 중 더 큰 값은 898 이므로 898을 return 합니다.


내 풀이

def solution(a, b):
    answer = 0
    ab = str(a) + str(b)
    ba = str(b) + str(a)
    
    if ab > ba:
        answer = ab
    else:
        answer = ba
        
    return int(answer)

다른 풀이

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

두 수의 연산값 비교하기

문제 설명
연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.

12 ⊕ 3 = 123
3 ⊕ 12 = 312
양의 정수 a와 b가 주어졌을 때, a ⊕ b와 2 * a * b 중 더 큰 값을 return하는 solution 함수를 완성해 주세요.

단, a ⊕ b와 2 * a * b가 같으면 a ⊕ b를 return 합니다.

제한사항
1 ≤ a, b < 10,000
입출력 예
a b result
2 91 364
91 2 912
입출력 예 설명
입출력 예 #1

a ⊕ b = 291 이고, 2 * a * b = 364 입니다. 둘 중 더 큰 값은 364 이므로 364를 return 합니다.
입출력 예 #2

a ⊕ b = 912 이고, 2 * a * b = 364 입니다. 둘 중 더 큰 값은 912 이므로 912를 return 합니다.


내 풀이

def solution(a, b):
    answer = 0
    s1 = f"{a}{b}"
    s2 = 2 * a * b
    
    if int(s1) == s2:
        answer = s1
    else:
        answer = int(max(int(s1), s2))
        
    return answer

다른 풀이

def solution(a, b):
    return max(int(str(a) + str(b)), 2 * a * b)

n의 배수

문제 설명
정수 num과 n이 매개 변수로 주어질 때, num이 n의 배수이면 1을 return n의 배수가 아니라면 0을 return하도록 solution 함수를 완성해주세요.

제한사항
2 ≤ num ≤ 100
2 ≤ n ≤ 9
입출력 예
num n result
98 2 1
34 3 0
입출력 예 설명
입출력 예 #1

98은 2의 배수이므로 1을 return합니다.
입출력 예 #2

32는 3의 배수가 아니므로 0을 return합니다.


내 풀이

def solution(num, n):
    answer = 0
    
    if num % n == 0:
        answer = 1
        
    return answer

다른 풀이

def solution(num, n):
    return int(not(num % n))

공배수

문제 설명
정수 number와 n, m이 주어집니다. number가 n의 배수이면서 m의 배수이면 1을 아니라면 0을 return하도록 solution 함수를 완성해주세요.

제한사항
10 ≤ number ≤ 100
2 ≤ n, m < 10
입출력 예
number n m result
60 2 3 1
55 10 5 0
입출력 예 설명
입출력 예 #1

60은 2의 배수이면서 3의 배수이기 때문에 1을 return합니다.
입출력 예 #2

55는 5의 배수이지만 10의 배수가 아니기 때문에 0을 return합니다.


내 풀이

def solution(number, n, m):
    return int(not(number % n or number % m))

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

문제 설명
양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.

제한사항
1 ≤ n ≤ 100
입출력 예
n result
7 16
10 220
입출력 예 설명
입출력 예 #1

예제 1번의 n은 7로 홀수입니다. 7 이하의 모든 양의 홀수는 1, 3, 5, 7이고 이들의 합인 1 + 3 + 5 + 7 = 16을 return 합니다.
입출력 예 #2

예제 2번의 n은 10으로 짝수입니다. 10 이하의 모든 양의 짝수는 2, 4, 6, 8, 10이고 이들의 제곱의 합인 22 + 42 + 62 + 82 + 102 = 4 + 16 + 36 + 64 + 100 = 220을 return 합니다.


내 풀이

def solution(n):
    answer = 0
    if n%2 == 0:
        for i in range(n + 1):
            if i%2 == 0:
                answer += i*i
            else:
                continue
    else:
        for i in range(n + 1):
            if i%2 == 0:
                continue
            else:
                answer += i
                
    return answer

다른 풀이

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

조건 문자열

문제 설명
문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.

두 수가 n과 m이라면
">", "=" : n >= m
"<", "=" : n <= m
">", "!" : n > m
"<", "!" : n < m
두 문자열 ineq와 eq가 주어집니다. ineq는 "<"와 ">"중 하나고, eq는 "="와 "!"중 하나입니다. 그리고 두 정수 n과 m이 주어질 때, n과 m이 ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하도록 solution 함수를 완성해주세요.

제한 사항
1 ≤ n, m ≤ 100
입출력 예
ineq eq n m result
"<" "=" 20 50 1
">" "!" 41 78 0
입출력 예 설명
입출력 예 #1

20 <= 50은 참이기 때문에 1을 return합니다.
입출력 예 #2

41 > 78은 거짓이기 때문에 0을 return합니다.


내 풀이

def solution(ineq, eq, n, m):
    answer = 0
    
    if ineq == ">":
        if eq == "=":
            answer = n >= m
        else:
            answer = n > m
    else:
        if eq == "=":
            answer = n <= m
        else:
            answer = n < m
            
    return int(answer)

다른 풀이

def solution(ineq, eq, n, m):
    return int(eval(str(n)+ineq+eq.replace('!', '')+str(m)))

flag에 따라 다른 값 반환하기

문제 설명
두 정수 a, b와 boolean 변수 flag가 매개변수로 주어질 때, flag가 true면 a + b를 false면 a - b를 return 하는 solution 함수를 작성해 주세요.

제한사항
-1,000 ≤ a, b ≤ 1,000
입출력 예
a b flag result
-4 7 true 3
-4 7 false -11
입출력 예
입출력 예 #1

예제 1번에서 flag가 true이므로 a + b = (-4) + 7 = 3을 return 합니다.
입출력 예 #2

예제 2번에서 flag가 false이므로 a - b = (-4) - 7 = -11을 return 합니다.


내 풀이

def solution(a, b, flag):
    return a + b if flag else a - b

다른 사람들의 풀이를 보면서 파이썬스러운 코드라는 것이 참 무서운 것 같다....