제일 작은 수 제거하기
내 코드
def solution(arr):
answer = []
if len(arr) == 1:
answer = [-1]
else:
minNum = None
for i in arr:
if minNum == None or minNum > i:
minNum = i
for i in range(len(arr)):
if arr[i] == minNum:
arr.pop(i)
break
answer = arr
return answer
다른 사람의 풀이
def solution(arr):
if len(arr) > 1: arr.remove(min(arr))
else: arr = [-1]
return arr
- remove()는 list에서 괄호 안의 요소를 삭제한다. 값을 반환하지는 않기 때문에 return에 바로 사용하면 None을 반환한다.
짝수와 홀수
내 코드
def solution(num):
if num%2 == 0:
return "Even"
else:
return "Odd"
다른 사람의 풀이
def solution(num):
return "Even" if num%2 == 0 else "Odd"
- & 연산자는 비트 연산자로 수를 이진법으로 비교한다.
최대공약수와 최소공배수
내코드
def solution(n, m):
answer = []
rangenum = 0
minnum = 0
maxnum = 1
if n <= m:
rangenum = n
theother = m
else:
rangenum = m
theother = n
for i in range(2, rangenum+1):
if n%i == 0 and m%i == 0:
maxnum = i
answer.append(maxnum)
if theother%rangenum == 0:
minnum = maxnum*(theother//rangenum)
elif theother%rangenum != 0 and maxnum != 1:
minnum = (theother//maxnum) * rangenum
else:
minnum = n*m
answer.append(minnum)
return answer
다른 사람의 풀이
def solution(n, m):
c, d = max(n, m), min(n, m)
t = 1
while t > 0:
t = c % d
c, d = d, t
answer = [c, int(n*m/c)]
return answer
- 유클리드 호제법을 이용한 것으로 최대공약수는 주어진 두 수 중에 큰 수를 작은 수로 나눈 나머지를 다시 큰 수를 나누었던 작은 수를 나머지로 나누고 새로운 나머지를 작은 수를 나누었던 수로 다시 나누는 작업을 반복해서 나머지가 0이 나오는 순간의 나누는 데 이용되는 수가 최대공약수이다. 최소공배수는 주어진 두 수를 곱하고 최대공약수로 나눈 수가 최소공배수이다.
콜라츠 추측
내 코드
def solution(num):
count = 0
while num != 1:
if count == 500:
count = -1
break
elif num%2 == 1:
num = 3*num + 1
count += 1
elif num%2 == 0:
num = num/2
count += 1
return count
- 딱히 괜찮은 다른 사람의 코드가 없었음. 적용할 만한 것은 for문을 딱 500번 돌아가게 하는 것이다. for문은 시작과 끝이 정해져 있고 while은 조건이 잘못되었을 경우 무한루프로 작동할 가능성이 있기 때문이다.
평균 구하기
내 코드
def solution(arr):
return sum(arr)/len(arr)
하샤드 수
내 코드
def solution(x):
answer = True
y = str(x)
z = 0
if len(y) > 1:
for i in range(len(y)):
z += int(y[i])
if x%z != 0:
answer = False
return answer
다른 사람의 풀이
def solution(n):
return n % sum([int(c) for c in str(n)]) == 0
핸드폰 번호 가리기
내 코드
def solution(phone_number):
list = []
for i in phone_number:
list.append(i)
for i in range(len(list)-4):
list[i] = "*"
answer = ""
for i in list:
answer += i
return answer
다른 사람의 풀이
def solution(phone_number):
return "*"*(len(phone_number)-4) + phone_number[-4:]
- [-4:]는 뒤에서 4번째 요소부터 마지막 요소까지를 나타낸다.
행렬의 덧셈
내 코드
def solution(arr1, arr2):
answer = []
tip = []
for i in range(len(arr1)):
for j in range(len(arr1[i])):
tip.append(arr1[i][j] + arr2[i][j])
answer.append(tip)
tip = []
return answer
다른 사람의 풀이
def solution(arr1,arr2):
return [[c + d for c, d in zip(a, b)] for a, b in zip(arr1,arr2)]
- zip()은 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다. 행렬로 생각하면 같은 위치에 있는 요소를 묶어주는 함수이다.
x만큼 간격이 있는 n개의 숫자
내 코드
def solution(x, n):
answer = []
a = 0
for i in range(n):
a += x
answer.append(a)
return answer
다른 사람의 풀이
def solution(x, n):
return [i * x + x for i in range(n)]
직사각형 별찍기
내 코드
a, b = map(int, input().strip().split(' '))
k = ""
for i in range(b):
for j in range(a):
k += "*"
k += "\n"
print(k)
다른 사람의 풀이
a, b = map(int, input().strip().split(' '))
answer = ('*'*a +'\n')*b
print(answer)
- print문 안에 end=""을 넣으면 개행이 되지 않는다.(다른 풀이)