티스토리 뷰
728x90
[ 코딩 테스트 연습 ]
111. 최댓값 만들기 (2)
- 정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
- 제한사항 :
- -10,000 ≤ numbers의 원소 ≤ 10,000
- 2 ≤ numbers 의 길이 ≤ 100
- 내가 푼 풀이
def solution(numbers):
numbers.sort()
return max(numbers[-1] * numbers[-2], numbers[0] * numbers[1])
print(solution([1, 2, -3, 4, -5]))
# 출력 : 15
- 다른 사람의 풀이
def solution(numbers):
answer = -100000000
for i in range(len(numbers)):
for j in range(i+1, len(numbers)):
if numbers[i] * numbers[j] > answer:
answer = numbers[i] * numbers[j]
return answer
def solution(numbers):
return max([k * j for i, k in enumerate(numbers) for j in numbers[i + 1:]])
112. 주사위의 개수
- 머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.
- 제한사항 :
- box의 길이는 3입니다.
- box[0] = 상자의 가로 길이
- box[1] = 상자의 세로 길이
- box[2] = 상자의 높이 길이
- 1 ≤ box의 원소 ≤ 100
- 1 ≤ n ≤ 50
- n ≤ box의 원소
- 주사위는 상자와 평행하게 넣습니다.
- 내가 푼 풀이
def solution(box, n):
result = 1
for i in box:
result *= i // n
return result
print(solution([10, 8, 6], 3))
# 출력 : 12
- 다른 사람의 풀이
def solution(box, n):
x, y, z = box
return (x // n) * (y // n) * (z // n )
def solution(box, n):
w,h,d = box[0]//n,box[1]//n,box[2]//n
return w*d*h
def solution(box, n):
answer = 0
a = box[0] // n
b = box[1] // n
c = box[2] // n
return a * b * c
113. 직각삼각형 출력하기
- "*"의 높이와 너비를 1이라고 했을 때, "*"을 이용해 직각 이등변 삼각형을 그리려고합니다. 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요.
- 제한사항 : 1 ≤ n ≤ 10
- 내가 푼 풀이
n = int(input())
for i in range(1, n + 1):
print('*' * i)
114. 특별한 이차원 배열 2
- n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때, arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요.
- 0 ≤ i, j < n인 정수 i, j에 대하여 arr[ i ][ j ] = arr[ j ][ i ]
- 제한사항 :
- 1 ≤ arr의 길이 = arr의 원소의 길이 ≤ 100
- 1 ≤ arr의 원소의 원소 ≤ 1,000
- 모든 arr의 원소의 길이는 같습니다.
- 내가 푼 풀이
def solution(arr):
n = len(arr)
for i in range(n):
for j in range(i + 1, n):
if arr[i][j] != arr[j][i]: # 대칭되는 원소가 다른 경우
return 0
return 1
print(solution([[5, 192, 33], [192, 72, 95], [33, 95, 999]]))
# 출력 : 1
- 다른 사람의 풀이
def solution(arr):
return int(arr == list(map(list, zip(*arr))))
def solution(arr):
return int(all(arr[i][j] == arr[j][i] for i in range(len(arr)) for j in range(len(arr))))
115. 문자열 정렬하기 (1)
- 문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
- 제한사항 :
- 1 ≤ my_string의 길이 ≤ 100
- my_string에는 숫자가 한 개 이상 포함되어 있습니다.
- my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다
- 내가 푼 풀이
def solution(my_string):
num = []
for i in my_string:
if i.isdigit(): # isdigit() 는 숫자만 판별하여 추출
num.append(int(i))
return sorted(num)
print(solution("hi12392"))
# 출력 : [1, 2, 2, 3, 9]
- 다른 사람의 풀이
def solution(my_string):
return sorted([int(c) for c in my_string if c.isdigit()])
def solution(my_string):
return sorted(map(int, filter(lambda s: s.isdigit(), my_string)))
def solution(my_string):
numbers = []
for char in my_string:
ascii_value = ord(char) # 문자의 ASCII 코드 값
if 48 <= ascii_value <= 57: # 숫자의 ASCII 코드 범위
numbers.append(int(char))
return sorted(numbers)
#숫자 판별 함수 #isnumeric() isdigit() isdecimal() #isnumeric() : 숫자값 표현이면 모두(제곱 등 다른 표현도 가능) True #isdigit() : 숫자처럼 생겼으면 True #isdicimal() : int로 변환가능한 수만 True
116. 인덱스 바꾸기
- 문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
- 제한사항 :
- 1 < my_string의 길이 < 100
- 0 ≤ num1, num2 < my_string의 길이
- my_string은 소문자로 이루어져 있습니다.
- num1 ≠ num2
- 내가 푼 풀이
def solution(my_string, num1, num2):
str_list = list(my_string) #인덱스
str_list[num1], str_list[num2] = str_list[num2], str_list[num1]
# 교환
return ''.join(str_list) # join으로 합침
print(solution("hello",1,2))
# 출력 : hlelo
117. 콜라츠 수열 만들기
- 모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다.계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.
- 임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.
- 그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.
- 제한사항 : 1 ≤ n ≤ 1,000
- 내가 푼 풀이
def solution(n):
C_list = [n] # 초기값 먼저 넣어줘야함
while n != 1: # n이 1이 될 때까지 반복
if n % 2 == 0: # 짝수 일때
n //= 2 # 2로 나눈 몫을 넣기
else: # 홀수
n = 3 * n + 1
C_list.append(n) # 계산한 모든 값을 리스트에 넣기
return C_list
print(solution(10))
# 출력 : [10, 5, 16, 8, 4, 2, 1]
- 다른 사람의 풀이
def solution(n):
l = [n]
while l[-1] != 1:
if l[-1] % 2:
l.append(3*l[-1]+1)
else:
l.append(l[-1]//2)
return l
def solution(n):
answer = []
if 1 <= n <= 1000:
x = n
while 1:
answer.append(x);
if x == 1:
break
if x % 2 == 0:
x /= 2
else:
x = 3 * x + 1
return answer
118. 특별한 이차원 배열 1
- 정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.
- arr[ i ][ j ] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.
- 제한사항 : 1 ≤ n ≤ 100
- 내가 푼 풀이
def solution(n):
arr = [[0] * n for _ in range(n)]
# n x n 크기의 2차원 배열 생성
for i in range(n):
arr[i][i] = 1 # 대각선 원소는 1로 설정
return arr
print(solution(3))
# 출력 : [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
- [0] * n을 통해 길이가 n인 리스트 [0, 0, ..., 0]을 생성합니다. 이렇게 생성된 리스트들이 리스트 컴프리헨션을 통해 한 행씩 모여 2차원 배열을 만든다.
119. 문자 리스트를 문자열로 변환하기
- 문자들이 담겨있는 배열 arr가 주어집니다. arr의 원소들을 순서대로 이어 붙인 문자열을 return 하는 solution함수를 작성해 주세요.
- 제한사항 :
- 1 ≤ arr의 길이 ≤ 200
- arr의 원소는 전부 알파벳 소문자로 이루어진 길이가 1인 문자열입니다.
- 1 ≤ arr의 길이 ≤ 200
- 내가 푼 풀이
def solution(str_list):
answer = ''
for i in str_list:
answer += i
return answer
print(solution(["a","b","c"]))
# 출력 : abc
- 다른 사람의 풀이
def solution(arr):
return ''.join(arr)
solution = lambda l: ''.join(l)
120. 배열 만들기 3
- 정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
- intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
- 제한사항 :
- 1 ≤ arr의 길이 ≤ 100,000
- 1 ≤ arr의 원소 < 100
- 1 ≤ a1 ≤ b1 < arr의 길이
- 1 ≤ a2 ≤ b2 < arr의 길이
- 1 ≤ arr의 길이 ≤ 100,000
- 내가 푼 풀이
def solution(arr, intervals):
A = arr[intervals[0][0]:intervals[0][1] + 1]
B = arr[intervals[1][0]:intervals[1][1] + 1]
new_arr = A + B
return new_arr
print(solution([1, 2, 3, 4, 5],[[1, 3], [0, 4]]))
# 출력 : [2, 3, 4, 1, 2, 3, 4, 5]
- 다른 사람의 풀이
def solution(arr, intervals):
s1, e1 = intervals[0]
s2, e2 = intervals[1]
return arr[s1:e1+1] + arr[s2:e2+1]
def solution(arr, intervals):
answer = []
for a,b in intervals:
answer += arr[a:b+1]
return answer
def solution(arr, intervals):
answer = []
for i,j in enumerate(intervals):
sp = intervals[i][0]
ep = intervals[i][1]
answer += arr[sp:ep+1]
return answer
반응형
'AI웹 개발자 과정 공부 (팀스파르타) > 코딩테스트 연습' 카테고리의 다른 글
24.03.29_TIL (알고리즘 예제 131-140) (1) | 2024.03.29 |
---|---|
24.03.27_TIL (알고리즘 예제 121-130) (0) | 2024.03.27 |
24.03.21_TIL (알고리즘 예제 101-110) (0) | 2024.03.21 |
24.03.20_TIL (알고리즘 예제 91-100) (0) | 2024.03.20 |
24.03.19_TIL (알고리즘 예제 81-90) (0) | 2024.03.19 |