티스토리 뷰

728x90

 

 

[ 코딩 테스트 연습 ]

 

 

 

 

 

 

71. 마지막 두 원소  

  • 정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • 2 ≤ num_list의 길이 ≤ 10
    • 1 ≤ num_list의 원소 ≤ 9
  • 내가 푼 풀이
def solution(num_list):
    result = []
    if num_list[-1] > num_list[-2]:
        return result.append(num_list[-1] - num_list[-2])
    else:
        return result.append(num_list[-1] * 2)

??? 왜 안나올까 -> 다른 사람의 풀이를 보면 result 로 따로 줘서.... num_list에 추가해야됨..ㅠㅠ

def solution(num_list):
    if num_list[-1] > num_list[-2]:
        return num_list + [num_list[-1] - num_list[-2]]
    else:
        return num_list + [num_list[-1] * 2]

print(solution([5, 2, 1, 7, 5]))
# 출력 : [5, 2, 1, 7, 5, 10]

 

 

  • 다른 사람의 풀이
def solution(l):
    l.append(l[-1]-l[-2] if l[-1]>l[-2] else l[-1]*2)
    return l
def solution(num_list):
    a=num_list[-1]
    b=num_list[-2]
    if a>b:num_list.append(a-b)
    else: num_list.append(2*a)
    return num_list
def solution(num_list):
    n1, n2 = num_list[-1], num_list[-2]
    if n1 > n2:
        num_list.append(n1 - n2)
    else:
        num_list.append(n1 * 2)
    return num_list

 

 

 

 

 

 

 

 

72. 원하는 문자열 찾기 

  • 알파벳으로 이루어진 문자열 myString과 pat이 주어집니다. myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요. 단, 알파벳 대문자와 소문자는 구분하지 않습니다.
  • 제한사항 :
    • 1 ≤ myString의 길이 ≤ 100,000
    • 1 ≤ pat의 길이 ≤ 300
    • myString과 pat은 모두 알파벳으로 이루어진 문자열입니다.
  • 내가 푼 풀이
def solution(myString, pat):
    return 1 if pat in myString else 0

이렇게 해서 안나왔음.. 대소문자 구분 안해도 해줘야함...하나로 통일^^

def solution(myString, pat):
    # 대소문자 구분 없이 비교하기 위해 소문자로 다 바꾸어준다.
    muString_lower = myString.lower()
    pat_lower = pat.lower()
    return 1 if pat_lower in muString_lower else 0

print(solution("AbCdEfG","aBc"))
# 출력 : 1

 

  • 다른 사람의 풀이
def solution(myString, pat):
    return 1 if pat.lower() in myString.lower() else 0
def solution(myString, pat):
    return int(pat.lower() in myString.lower())

 

 

 

 

 

 

 

 

73. 배열 만들기 1 

  • 정수 n k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
  • 제한사항 :
    • 1 ≤ n ≤ 1,000,000
    • 1 ≤ k ≤ min(1,000, n)
  • 내가 푼 풀이 (66. n의 배수 고르기 참조)
def solution(n, k):
    return [i for i in list(range(1,n+1)) if i % k == 0]

print(solution(10,3))
# 출력 : [3, 6, 9]

 

  • 다른 사람의 풀이
def solution(n, k):
    return [i for i in range(k,n+1,k)]
def solution(n, k):
    answer = []
    index = 1
    while k * index <= n:
        answer.append(k*index)
        index += 1
    return answer
def solution(n, k):
    return [k*i for i in range(1,n//k+1)]

 

 

 

 

 

 

 

 

74. 가위 바위 보 

  • 가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.
  • 제한사항 :
    • 0 < rsp의 길이 ≤ 100
    • rsp와 길이가 같은 문자열을 return 합니다.
    • rsp는 숫자 0, 2, 5로 이루어져 있습니다.
  • 내가 푼 풀이
def solution(rsp):
    # 2는 가위, 0은 바위, 5는 보
    win = ''
    for i in rsp:
        if i == '2':
            win += '0' # 가위를 바위가 이김
        elif i == '0':
            win += '5' # 바위를 보가 이김
        elif i == '5':
            win += '2' # 보를 가위가 이김
    return win

print(solution("205"))
# 출력 : 052

 

  • 다른 사람의 풀이
def solution(rsp):
    d = {'0':'5','2':'0','5':'2'}
    return ''.join(d[i] for i in rsp)
def solution(rsp):
    rsp =rsp.replace('2','s')
    rsp =rsp.replace('5','p')
    rsp =rsp.replace('0','r')
    rsp =rsp.replace('r','5')
    rsp =rsp.replace('s','0')
    rsp =rsp.replace('p','2')
    return rsp
def solution(rsp):
    return rsp.translate(str.maketrans('025', '502'))

 

  • 파이썬의 translate() 함수를 사용하여 문자열을 변환하는 기능을 구현하고 있습니다. 이 함수는 문자열을 변환하는데 사용되며, 변환 테이블을 사용하여 각 문자를 다른 문자로 대체합니다. 여기서 str.maketrans('025', '502')는 변환 테이블을 생성합니다. 이 변환 테이블은 다음과 같이 동작합니다:
  • '0'을 '5'로 변환
  • '2'를 '0'으로 변환
  • '5'를 '2'로 변환
  • str.maketrans() 함수는 두 문자열 간의 일대일 대응을 정의하는 매핑 테이블을 생성합니다. 이 매핑 테이블은 translate() 함수를 사용하여 문자열에서 문자를 다른 문자로 변환할 때 사용됩니다.

 

 

 

 

 

 

 

75. 배열 비교하기 

  • 이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.
    • 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
    • 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
    두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ arr1의 길이 ≤ 100
    • 1 ≤ arr2의 길이 ≤ 100
    • 1 ≤ arr1의 원소 ≤ 100
    • 1 ≤ arr2의 원소 ≤ 100
    • 문제에서 정의한 배열의 대소관계가 일반적인 프로그래밍 언어에서 정의된 배열의 대소관계와 다를 수 있는 점에 유의해주세요.
  • 내가 푼 풀이
def solution(arr1, arr2):
    if len(arr1) < len(arr2):
        return -1
    elif len(arr1) > len(arr2):
        return 1
    elif len(arr2) == len(arr1) and sum(arr1) > sum(arr2):
        return 1
    elif len(arr2) == len(arr1) and sum(arr1) < sum(arr2):
        return -1
    elif len(arr1) == len(arr2) and sum(arr1) == sum(arr2):
        return 0

print(solution([49, 13],[70, 11, 2]))
# 출력 : -1

 

  • 다른 사람의 풀이
def solution(arr1, arr2):
    return (len(arr1) > len(arr2)) - (len(arr2) > len(arr1)) or (sum(arr1) > sum(arr2)) - (sum(arr2) > sum(arr1))

print(solution([49, 13],[70, 11, 2]))
# 출력 : -1
def solution(arr1, arr2):
    x, y = len(arr1), len(arr2)
    if x != y:
        return 1 if x > y else -1
    elif x == y:
        sum_x, sum_y = sum(arr1), sum(arr2)
        if sum_x > sum_y:
            return 1 
        elif sum_x < sum_y: 
            return -1 
        else:
            return 0

 

 

 

 

 

 

 

 

76. 부분 문자열 

  • 어떤 문자열 A가 다른 문자열 B안에 속하면 A를 B의 부분 문자열이라고 합니다. 예를 들어 문자열 "abc"는 문자열 "aabcc"의 부분 문자열입니다. 문자열 str1과 str2가 주어질 때, str1이 str2의 부분 문자열이라면 1을 부분 문자열이 아니라면 0을 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • 1 ≤ str1  str2 ≤ 20
    • str1과 str2는 영어 소문자로만 이루어져 있습니다.
  • 내가 푼 풀이 (72. 원하는 문자열 찾기 참조)
def solution(x,y):
    # 대소문자 구분 없이 비교하기 위해 소문자로 다 바꾸어준다.
    x_lower = x.lower()
    y_lower = y.lower()
    return 1 if x_lower in y_lower else 0

print(solution("abc", "aabcc"))
# 출력 : 1

 

  • 다른 사람의 풀이
def solution(str1, str2):
    return int(str1 in str2)
def solution(str1, str2):
    return 1 if str1 in str2 else 0
def solution(str1, str2):
    return [0,1][str1 in str2]
def solution(str1, str2):
    answer = 0
    if str1 in str2:
        answer=1
    else:
        answer=0
    return answer

 

 

 

 

 

 

 

 

77. 배열에서 문자열 대소문자 변환하기 

  • 문자열 배열 strArr가 주어집니다. 모든 원소가 알파벳으로만 이루어져 있을 때, 배열에서 홀수번째 인덱스의 문자열은 모든 문자를 대문자로, 짝수번째 인덱스의 문자열은 모든 문자를 소문자로 바꿔서 반환하는 solution 함수를 완성해 주세요.
  • 제한사항 :
    • 1 ≤ strArr ≤ 20
      • 1 ≤ strArr의 원소의 길이 ≤ 20
      • strArr의 원소는 알파벳으로 이루어진 문자열 입니다.
  • 내가 푼 풀이
def solution(strArr):
    x = []

    for i in range(len(strArr)):
        if i % 2 == 0:  # 짝수
            x.append(strArr[i].lower())  # 소문자
        else:  # 홀수
            x.append(strArr[i].upper())  # 대문자

    return x

print(solution(["aBc","AbC"]))
# 출력 : ['abc', 'ABC']

 

  • 다른 사람의 풀이
def solution(strArr):
    return [s.lower() if i % 2 == 0 else s.upper() for i, s in enumerate(strArr)]

 

 

 

 

 

 

 

78. 접두사인지 확인하기 

  • 어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다. 예를 들어, "banana"의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana"입니다.
    문자열 my_string is_prefix가 주어질 때, is_prefix my_string의 접두사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ my_string의 길이 ≤ 100
    • 1 ≤ is_prefix의 길이 ≤ 100
    • my_string과 is_prefix는 영소문자로만 이루어져 있습니다.
  • 내가 푼 풀이
def solution(x,y):
    if len(y) > len(x):
        return 0
    for i in range(len(y)):
        if y[i] != x[i]:
            return 0
    return 1

print(solution("banana","aa"))
# 출력 : 0

 

  • 다른 사람의 풀이
def solution(my_string, is_prefix):
    return int(my_string.startswith(is_prefix))

print(solution("banana","aaxxxxxx"))
# 출력 : 0
def solution(my_string, y):
    if my_string[:len(y)] == y:
        return 1
    return 0
def solution(my_string, is_prefix):
    return 1 if my_string.find(is_prefix) == 0 else 0

 

 

 

 

 

 

 

79. 글자 이어붙여 문자열 만들기  

  • 문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ my_string의 길이 ≤ 1,000
    • my_string의 원소는 영소문자로 이루어져 있습니다.
    • 1 ≤ index_list의 길이 ≤ 1,000
    • 0 ≤ index_list의 원소 < my_string의 길이
  • 내가 푼 풀이
def solution(x, y):
    answer = ''
    for i in y:
        answer += x[i]
    return answer

print(solution("cvsgiorszzzmrpaqpe",[16, 6, 5, 3, 12, 14, 11, 11, 17, 12, 7] ))
# 출력 : programmers

 

  • 다른 사람의 풀이
def solution(my_string, index_list):
    return ''.join([my_string[idx] for idx in index_list])
def solution(my_string, index_list):
    return ''.join(map(lambda x: my_string[x], index_list))
solution=lambda x,y:''.join(x[z]for z in y)

 

 

 

 

 

 

 

 

80. 접미사인지 확인하기 

  • 어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.
    문자열 my_string is_suffix가 주어질 때, is_suffix my_string의 접미사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ my_string의 길이 ≤ 100
    • 1 ≤ is_suffix의 길이 ≤ 100
    • my_string과 is_suffix는 영소문자로만 이루어져 있습니다.
  • 내가 푼 풀이 (78. 접두사인지 확인하기 참조)
def solution(x, y):
    return 1 if x[len(y):] == y else 0

print(solution("banana","axxxxxxxxa"))
# 출력 : 0

출력은 나오는데 시간? 에서 실패로 걸림....ㅠㅠ

=> 이 코드는 yx의 접미사가 아니라 x의 일부분인지를 비교하고 있습니다. 예를 들어, x가 "banana"이고 y가 "na"인 경우에는 x[len(y):]가 "a"가 되므로 이 조건은 False가 됩니다.

 

def solution(x, y):
    return 1 if x[-len(y):] == y else 0

print(solution("banana","na"))
# 출력 : 1

 

  • 다른 사람의 풀이
def solution(my_string, is_suffix):
    return int(my_string.endswith(is_suffix))
  • endswith() 는 접미사, startswith() 는 접두사의 파이썬 매서드 이다
def solution(my_string, is_suffix):

    return 1 if my_string[::-1][:len(is_suffix)]==is_suffix[::-1] else 0

print(solution("banana","na"))
# 출력 : 1
def solution(my_string, is_suffix):
    answer = 0
    compare_len = len(my_string) - len(is_suffix)

    if my_string[compare_len:] == is_suffix:
        answer = 1

    return answer
반응형
반응형
TAG
more
최근에 올라온 글