티스토리 뷰

728x90

 

 

[ 코딩 테스트 연습 ]

 
 
 
 
 
 

81. 공백으로 구분하기 1  

  • 단어가 공백 한 개로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • my_string은 영소문자와 공백으로만 이루어져 있습니다.
    • 1 ≤ my_string의 길이 ≤ 1,000
    • my_string의 맨 앞과 맨 뒤에 글자는 공백이 아닙니다.
  • 내가 푼 풀이
def solution(my_string):
    return my_string.split()

print(solution("i love you"))
# 출력 : ['i', 'love', 'you']

 
 

  • 다른 사람의 풀이도 비슷함

 
 
 
 
 
 
 

82. 암호 해독 

  • 군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
    • 암호화된 문자열 cipher를 주고받습니다.
    • 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
    문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • 1 ≤ cipher의 길이 ≤ 1,000
    • 1 ≤ code  cipher의 길이
    • cipher는 소문자와 공백으로만 구성되어 있습니다.
    • 공백도 하나의 문자로 취급합니다.
  • 내가 푼 풀이
def solution(i, code):
    return i[code - 1::code]  # code의 배수 번째 글자 추출
# code -1 번째부터 돌아서 code 만큼씩 더한 숫자만큼 돈다(배수)

print(solution("dfjardstddetckdaccccdegk",4))
# 출력 : attack

 
 

  • 다른 사람의 풀이
def solution(cipher, code):
    return ''.join(cipher[i] for i in range(code-1,len(cipher),code))
def solution(cipher, code):
    answer=''
    index=list(range(code,len(cipher)+1,code))
    for i in index:
        answer+=cipher[i-1]
    return answer

 
 
 
 
 
 
 
 
 
 

83. 부분 문자열인지 확인하기 

  • 부분 문자열이란 문자열에서 연속된 일부분에 해당하는 문자열을 의미합니다. 예를 들어, 문자열 "ana", "ban", "anana", "banana", "n"는 모두 문자열 "banana"의 부분 문자열이지만, "aaa", "bnana", "wxyz"는 모두 "banana"의 부분 문자열이 아닙니다. 문자열 my_string과 target이 매개변수로 주어질 때, target이 문자열 my_string의 부분 문자열이라면 1을, 아니라면 0을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ my_string의 길이 ≤ 100
    • my_string은 영소문자로만 이루어져 있습니다.
    • 1 ≤ target의 길이 ≤ 100
    • target은 영소문자로만 이루어져 있습니다.
  • 내가 푼 풀이
def solution(x,y):
    return 1 if y in x else 0

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

 
 

  • 다른 사람의 풀이
def solution(my_string, target):
    return int(target in my_string)
def solution(my_string, target):
    answer = 0

    my_string2 = list(my_string)

    for i in range(len(my_string)):
        if my_string2[:len(target)] == list(target):
            return 1
        my_string2.pop(0)

    return answer
solution=lambda x,y:int(y in x)
def solution(my_string, target):
    return 1 if my_string.find(target) >= 0 else 0 

 
 
 
 
 
 
 
 

84. 뒤에서 5등위로 

  • 정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 제외한 수들을 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • 6 ≤ num_list의 길이 ≤ 30
    • 1 ≤ num_list의 원소 ≤ 100
  • 내가 푼 풀이
def solution(num_list):
    # sorted함수로 숫자를 정렬 후 가장 작은 5개의 수를 찾는다.
    i = sorted(num_list)[:5]

    # 가장 작은 5개의 수를 제외한 수
    result = [num for num in num_list if num not in i]

    # 오름차순으로 정렬
    result.sort()

    return result

print(solution([12, 4, 15, 46, 38, 1, 14, 56, 32, 10]))
# 출력 : [15, 32, 38, 46, 56]

=> 잘 출력됐는데 왜 안되냐ㅠㅠ 또 속도에서 걸렸다... 코드를 더 줄여야 하는데..
 

def solution(num_list):
    # num_list를 오름차순으로 정렬
    num_list.sort()

    # 가장 작은 5개의 수를 제외하고 남은 수 출력
    return num_list[5:]

print(solution([12, 4, 15, 46, 38, 1, 14, 56, 32, 10]))
# 출력 : [15, 32, 38, 46, 56]

 
 

  • 다른 사람의 풀이
def solution(num_list):
    return sorted(num_list)[5:]
def solution(num_list):
    for i in range(len(num_list)):
        j=len(num_list)
        for k in range(0,j):
            if num_list[i] < num_list[k]:
                temp = num_list[i]
                num_list[i] = num_list[k]
                num_list[k]=temp

    return num_list[5:len(num_list)]

 
 
 
 
 
 
 
 
 

85. 배열의 원소만큼 추가하기 

  • 아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 양의 정수 배열 arr가 매개변수로 주어질 때, arr의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ arr의 길이 ≤ 100
    • 1 ≤ arr의 원소 ≤ 100
  • 내가 푼 풀이
def solution(arr):
    X = []
    for i in arr:
        X.extend([i] * i) # extend는 X에 추가하는 함수
    return X

print(solution([5, 1, 4]))
# 출력 : [5, 5, 5, 5, 5, 1, 4, 4, 4, 4]

 

  • 다른 사람의 풀이
def solution(arr):
    return [i for i in arr for j in range(i)]
    # for i in arr안에 for j in range(i) 를 넣어서 리스트에 i를 i번 넣음
def solution(arr):
    answer = []
    for i in range(len(arr)):
        for j in range(arr[i]):
            answer.append(arr[i])
    return answer
def solution(arr):
    answer = []
    for num in arr:
        answer += [num] * num
    return answer
  • Bad memory usage which using '+=' operand. append() method is more memory efficient 라고 댓글이 달렸는데 왜?  https://webprogrammer.tistory.com/516 에 들어가보면 설명이 되어있지만 편한대로 쓰면 되는건가 싶다.

 

 

 

 

 

 

 

 

 

86. 배열의 길이에 따라 다른 연산하기 

  • 정수 배열 arr과 정수 n이 매개변수로 주어집니다. arr의 길이가 홀수라면 arr의 모든 짝수 인덱스 위치에 n을 더한 배열을, arr의 길이가 짝수라면 arr의 모든 홀수 인덱스 위치에 n을 더한 배열을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ arr의 길이 ≤ 1,000
    • 1 ≤ arr의 원소 ≤ 1,000
    • 1 ≤ n ≤ 1,000
  • 내가 푼 풀이
def solution(arr, n):
    X = []
    # 배열의 길이가 홀수일 때
    if len(arr) % 2 != 0:
        for i in range(len(arr)):
            if i % 2 == 0:
                X.append(arr[i] + n)
            else:
                X.append(arr[i])
    # 배열의 길이가 짝수일 때
    else:
        for i in range(len(arr)):
            if i % 2 != 0:
                X.append(arr[i] + n)
            else:
                X.append(arr[i])
    return X

print(solution([49, 12, 100, 276, 33],27))
# 출력 : [76, 12, 127, 276, 60]

 

  • 다른 사람의 풀이
def solution(arr, n):
    N=len(arr)
    if N%2:
        for i in range(0,N,2): arr[i]+=n
    else:
        for i in range(1,N,2): arr[i]+=n
    return arr
def solution(arr, n):
    for i in range(len(arr)):
        if i % 2 != len(arr) % 2:
            arr[i] += n
    return arr

 

 

 

 

 

 

 

 

 

87. 카운트 다운 

  • 정수 start_num end_num가 주어질 때, start_num에서 end_num까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • 0 ≤ end_num  start_num ≤ 50
  • 내가 푼 풀이
def solution(start, end_num):
    return list(range(start, end_num-1, -1))

print(solution(10,3))
# 출력 : [10, 9, 8, 7, 6, 5, 4, 3]

 

  • 다른 사람의 풀이
def solution(start, end):
    return [i for i in range(start,end-1,-1)]
def solution(start, end):
    answer = []
    while start>=end:
        answer.append(start)
        start-=1        
    return answer
def solution(start, end):
    answer = []
    for i in range(start-end+1):
        answer += [start-i]
    return answer

 

 

 

 

 

 

 

88. 대문자와 소문자 

  • 문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • 1 ≤ my_string의 길이 ≤ 1,000
    • my_string은 영어 대문자와 소문자로만 구성되어 있습니다.
  • 내가 푼 풀이 (77. 배열에서 문자열 대소문자 변환하기 참조)
def solution(my_string):
    result = ''
    for i in my_string:
        if i.isupper(): # isupper은 대문자 찾는 함수
            result += i.lower()
        elif i.islower(): # islower은 소문자 찾는 함수
            result += i.upper()
        else:
            result += i
    return result

print(solution("cccCCC"))
# 출력 : CCCccc

 

 

  • 다른 사람의 풀이
def solution(my_string):
    return my_string.swapcase()
  • swapcase() 메서드는 파이썬 문자열 객체에 속하는 메서드로, 문자열의 대소문자를 상호 교환하여 새로운 문자열을 반환합니다.
def solution(my_string):
    answer = ''
    upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    lower = 'abcdefghijklmnopqrstuvwxyz'
    for c in my_string:
        if c in upper:
            answer+=c.lower()
        elif c in lower:
            answer+=c.upper()
    return answer
def solution(my_string):
    return ''.join([x.lower() if x.isupper() else x.upper() for x in my_string])

 

 

 

 

 

 

 

 

 

 

89.  첫 번째로 나오는 음수  

  • 정수 리스트 num_list가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.
  • 제한사항 :
    • 5 ≤ num_list의 길이 ≤ 100
    • -10 ≤ num_list의 원소 ≤ 100
  • 내가 푼 풀이
def solution(num_list):
    index = 0
    for num in num_list:
        if num < 0:
            return index
        index += 1
    return -1

print(solution([12, 4, 15, 46, 38, -2, 15]))
# 출력 : 5

 

  • 다른 사람의 풀이
def solution(num_list):
    for i in range(len(num_list)):
        if num_list[i]<0:return i
    return -1
def solution(num_list):
    return ([i for i in range(len(num_list)) if num_list[i] < 0] or [-1])[0]
def solution(num_list):
    for i in range(0,len(num_list)):
        if num_list[i] < 0:
            return i
    return -1
def solution(num_list):
    for i, num in enumerate(num_list):
        if num < 0:
            return i
    return -1

 

  • enumerate() 함수는 파이썬의 내장 함수 중 하나로, 주어진 iterable(반복 가능한) 객체(리스트, 튜플, 문자열 등)의 각 요소에 대해 인덱스와 값을 함께 순회할 수 있도록 해줍니다. 각 요소의 인덱스와 값을 튜플 형태로 반환합니다.

 

 

 

 

 

90.  순서 바꾸기 

  • 정수 리스트 num_list와 정수 n이 주어질 때, num_list n 번째 원소 이후의 원소들과 n 번째까지의 원소들로 나눠 n 번째 원소 이후의 원소들을 n 번째까지의 원소들 앞에 붙인 리스트를 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • 2 ≤ num_list의 길이 ≤ 30
    • 1 ≤ num_list의 원소 ≤ 9
    • 1 ≤ n  num_list의 길이
  • 내가 푼 풀이
def solution(num_list, n):
    # n 번째 이후의 원소들과 n 번째까지의 원소 앞 뒤 자름
    F = num_list[n:]
    B = num_list[:n]

    result = F + B
    return result

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

 

  • 다른 사람의 풀이
def solution(num_list, n):
    return num_list[n:] + num_list[:n]

 

 

 

 

 

 

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