티스토리 뷰

728x90

 

[ 코딩 테스트 연습 ]

 
 
 
 
 
 

101. 배열의 원소 삭제하기 

  • 정수 배열 arr delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ arr의 길이 ≤ 100
    • 1 ≤ arr의 원소 ≤ 1,000
    • arr의 원소는 모두 서로 다릅니다.
    • 1 ≤ delete_list의 길이 ≤ 100
    • 1 ≤ delete_list의 원소 ≤ 1,000
    • delete_list의 원소는 모두 서로 다릅니다.
  • 내가 푼 풀이
def solution(arr, delete_list):
    return [i for i in arr if i not in delete_list]

print(solution([293, 1000, 395, 678, 94],[94, 777, 104, 1000, 1, 12]))
# 출력 : [293, 395, 678]

 

 

  • 다른 사람의 풀이
def solution(arr, delete_list):
    answer = []
    for i in delete_list:
        if i in arr:
            arr.remove(i)
    return arr
def solution(arr, delete_list):
    for elem in delete_list:
        if elem in arr:
            arr.remove(elem)
    return arr
def solution(arr, delete_list):
    for d in delete_list:
        tmp = []
        for i in range(len(arr)):
            if arr[i] != d:
                tmp.append(arr[i])
        arr = tmp[:]
    return arr

 

 

 

 

 

 

 

 

102. 꼬리 문자열 

  • 문자열들이 담긴 리스트가 주어졌을 때, 모든 문자열들을 순서대로 합친 문자열을 꼬리 문자열이라고 합니다. 꼬리 문자열을 만들 때 특정 문자열을 포함한 문자열은 제외시키려고 합니다. 예를 들어 문자열 리스트 ["abc", "def", "ghi"]가 있고 문자열 "ef"를 포함한 문자열은 제외하고 꼬리 문자열을 만들면 "abcghi"가 됩니다.
  • 문자열 리스트 str_list와 제외하려는 문자열 ex가 주어질 때, str_list에서 ex를 포함한 문자열을 제외하고 만든 꼬리 문자열을 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • 2 ≤ str_list의 길이 ≤ 10
    • 1 ≤ str_list의 원소의 길이 ≤ 10
    • 1 ≤ ex의 길이 ≤ 5
  • 내가 푼 풀이
def solution(str_list, ex):
    answer = ''
    for i in str_list:
        if ex not in i:
            answer += i
    return answer

print(solution(["abc", "def", "ghi"],"ef"))
# 출력 : "abcghi"

 

 

  • 다른 사람의 풀이
def solution(str_list, ex):
    filtered_list = [s for s in str_list if ex not in s]
    return "".join(filtered_list)
def solution(str_list, ex):
    return ''.join([i for i in str_list if ex not in i])
def solution(str_list, ex):
    return ''.join(filter(lambda x: ex not in x, str_list))
def solution(str_list, ex):
    answer = ''
    for idx,val in enumerate(str_list):
        if ex not in val:
            answer+=val
        else:
            pass
    return answer

 

 

 

 

 

 

 

 

 

103. 문자열 정수의 합 

  • 한 자리 정수로 이루어진 문자열 num_str이 주어질 때, 각 자리수의 합을 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :  3 ≤ num_str ≤ 100
  • 내가 푼 풀이
def solution(num_str):
    return sum( int(i) for i in num_str)

print(solution("123456789"))
# 출력 : 45

 

  • 다른 사람의 풀이
solution=lambda s:sum(map(int,s))
def solution(num_str):
    answer = 0
    for i in num_str:
        answer+=int(i)
    return answer
def solution(num_str):
    b=[]
    for i in range(len(num_str)):
        a = int(num_str[i])
        b.append(a)
    answer = sum(b)
    return answer
def solution(num_str):
    return sum(list(map(int, num_str)))

 

 

 

 

 

 

 

104. x 사이의 개수 

  • 문자열 myString이 주어집니다. myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
  • 제한사항 :
    • 1 ≤ myString의 길이 ≤ 100,000
      • myString은 알파벳 소문자로 이루어진 문자열입니다.
  • 내가 푼 풀이
def solution(myString):
    i = myString.split('x') # 먼저 x로 잘라준다
    #['o', 'oo', 'o', '', 'o', '']
    return [len(part) for part in i]

print(solution("oxooxoxxox"))
# 출력 : [1, 2, 1, 0, 1, 0]

 

 

  • 다른 사람의 풀이
def solution(myString):
    return [len(w) for w in myString.split('x')]
def solution(myString):
    return list(map(lambda x: len(x), myString.split('x')))

 

 

 

 

 

 

 

 

 

105. ad 제거하기 

  • 문자열 배열 strArr가 주어집니다. 배열 내의 문자열 중 "ad"라는 부분 문자열을 포함하고 있는 모든 문자열을 제거하고 남은 문자열을 순서를 유지하여 배열로 return 하는 solution 함수를 완성해 주세요.
  • 제한사항 :
    • 1 ≤ strArr의 길이 ≤ 1,000
      • 1 ≤ strArr의 원소의 길이 ≤ 20
      • strArr의 원소는 알파벳 소문자로 이루어진 문자열입니다.
  • 내가 푼 풀이 (102. 꼬리 문자열  참조)
def solution(strArr, ):
    answer = []
    for i in strArr:
        if 'ad' not in i:
            answer.append(i)
    return answer

print(solution(["and","notad","abcd"]))
# 출력 : ["and","abcd"]

 

  • 다른 사람의 풀이
def solution(strArr):
    return [word for word in strArr if 'ad' not in word]
def solution(strArr):
    return list(filter(lambda x:'ad' not in x, strArr))
solution=lambda s:[c for c in s if 'ad'not in c]

 

 

 

 

 

 

 

 

 

106. 홀수 vs 짝수 

  • 정수 리스트 num_list가 주어집니다. 가장 첫 번째 원소를 1번 원소라고 할 때, 홀수 번째 원소들의 합과 짝수 번째 원소들의 합 중 큰 값을 return 하도록 solution 함수를 완성해주세요. 두 값이 같을 경우 그 값을 return합니다.
  • 제한사항 :
    • 5 ≤ num_list의 길이 ≤ 50
    • -9 ≤ num_list의 원소 ≤ 9
  • 내가 푼 풀이
def solution(num_list):
    odd_sum = sum(num_list[::2])  # 홀수 번째 원소들의 합
    even_sum = sum(num_list[1::2])  # 짝수 번째 원소들의 합
    return max(odd_sum, even_sum)  # 두 합 중 큰 값을 반환

print(solution([4, 2, 6, 1, 7, 6]))
# 출력 : 17

 

  • 다른 사람의 풀이
def solution(num_list):
    even = 0
    odd = 0
    for i in range(len(num_list)):
        if i % 2 == 0:
            even += num_list[i]
        elif i % 2 == 1 :
            odd += num_list[i]
    if even > odd :
        return even
    else:
        return odd 

 

 

 

 

 

 

 

 

 

107. 가장 큰 수 찾기 

  • 정수 배열 array가 매개변수로 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 return 하도록 solution 함수를 완성해보세요.
  • 제한사항 :
    • 1 ≤ array의 길이 ≤ 100
    • 0 ≤ array 원소 ≤ 1,000
    • array에 중복된 숫자는 없습니다.
  • 내가 푼 풀이
def solution(array):
    return [max(array), array.index(max(array))]

print(solution([9, 10, 11, 8]))
# 출력 : [11, 2]

 

 

  • 다른 사람의 풀이
def solution(array):
    return sorted([[a, i] for i, a in enumerate(array)])[::-1][0]
def solution(array):
    mx = 0
    ind = 0
    for i, v in enumerate(array):
        if v > mx:
            mx = v
            ind = i
    return [mx, ind]

 

 

 

 

 

 

 

 

 

108. 0 떼기 

  • 정수로 이루어진 문자열 n_str이 주어질 때, n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • 2 ≤ n_str ≤ 10
    • n_str이 "0"으로만 이루어진 경우는 없습니다.
  • 내가 푼 풀이
def solution(n_str):
    for i in range(len(n_str)):
        if n_str[i] != "0":
            return n_str[i:]
        
print(solution("0010"))
# 출력 : "10"

 

  • 다른 사람의 풀이
def solution(n_str):
    idx = 0
    while idx < len(n_str) and n_str[idx] == '0':
        idx += 1
    return n_str[idx:]
def solution(n_str):
    return n_str.lstrip('0')
  • lstrip() 함수는 문자열의 왼쪽(시작 부분)에서 특정 문자들을 제거하는 함수입니다. 여기서 'lstrip'은 'left strip'을 의미
solution=lambda x:str(int(x))  # 0만 제거하면 되니까 숫자로 0 제거

 

 

 

 

 

 

 

 

 

109.  I 로 만들기 

  • 알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.
  • 제한사항 :
    • 1 ≤ myString ≤ 100,000
      • myString은 알파벳 소문자로 이루어진 문자열입니다.
  • 내가 푼 풀이
def solution(myString):
    result = ''
    for i in myString:
        if i < 'l':
            result += 'l'
        else:
            result += i
    return result

print(solution("abcdevwxyz"))
# 출력 : "lllllvwxyz"

 

 

  • 다른 사람의 풀이
def solution(myString):
    answer = [x if x > 'l' else 'l' for x in myString]
    return ''.join(answer)
def solution(myString):
    return myString.translate(str.maketrans('abcdefghijk', 'lllllllllll'))

 

 

 

 

 

 

 

110.  가까운 1 찾기 

  • 정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.
  • 단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.
  • 제한사항 :
    • 3 ≤ arr의 길이 ≤ 100'000
      • arr의 원소는 전부 1 또는 0입니다.
  • 내가 푼 풀이
def solution(arr, idx):
    for i in range(idx, len(arr)):
        if arr[i] == 1:
            return i
        else: pass
    return -1

print(solution([1, 1, 1, 1, 0],3))
# 출력 : 3

 

  • 다른 사람의 풀이
def solution(arr, idx):
    answer = 0
    try:
        answer = arr.index(1, idx)
    except:
        answer = -1

    return answer

 

  • try 는 실행할 코드, 만약 실행 중에 예외가 발생하면, 해당 예외는 except 블록으로 넘어가게 됩니다.
  • except 블록은 예외가 발생했을 때 실행, 예외가 발생하지 않으면 except 블록은 실행되지 않습니다.
def solution(arr, idx):
    answer = -1
    for i in range(idx, len(arr)):
        if arr[i]:
            answer = i
            break
    return answer
반응형
반응형
TAG
more
최근에 올라온 글