1. split로 잘라내기 후에 바로 for 함수에 사용할수 있는 방법이다.
- := 사용해 변환하면서 반환하기 가능한 수식, 3.8부터 사용 가능하다고 되어잇다.
for i in range(len(s := s.split(" "))):
answer += int(s[i]) if s[i] != "Z" else -int(s[i-1])
2. 특정 수의 소인수분해를 해서 중복된 수를 빼는 것이다.
- 처음에는 sorted(list(set(answer)))를 사용했지만, 5의 배수가 남아있는 상황이 나와 for을 하나 더 만들어 소수인지 판별하게 했다.
- 더 좋은 방법이 있을 것 같다.
def solution(n):
answer = []
number = 2
while number < n+1:
if n % number == 0:
for i in range(1, number):
if i+1 == number:
answer.append(number)
elif number % (i+1) == 0:
break
n //= number
number += 1
return answer
3. 배열로 받은 공던지기 알고르짐인데 한줄로 간단하게 수학적으로 표현이 가능하다.
- 여러줄을 작성해 효율이 별로 일수 있으나, 다른 새로운 방법을 알아서 좋다.
- 수학적 접근이 중요한 것 같다.
# 1줄 코딩 참고 용
def solution(numbers, k):
return numbers[2 * (k - 1) % len(numbers)]
# 내가 풀이한 내용
def solution(numbers, k):
answer = 0
for i in range(1, k):
answer += 2
if answer >= len(numbers):
answer -= len(numbers)
return numbers[answer]
4. 배열안 무작위 숫자에 관하여 7이 포함되는 수를 찾는것인데, 한줄로 가능하다...
# 1줄 코딩 참고 용
str(array).count('7')
- 내가 했던 방법으로 해야하는줄 알았지만, 더욱 간단하게 가능하다는게 신기하다.
# 내가 한 코딩
def solution(array):
answer = 0
for i in array:
for n in str(i):
if int(n) % 7 == 0 and int(n) != 0:
answer += 1
return answer
5. enumerate 함수 사용
- enumerate를 사용하면 변환하면서 루프를 돌릴 수 있다고 하는데 해당 방법에 대해 알아 봐야겠다.
for num, eng in enumerate(["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]):
numbers = numbers.replace(eng, str(num))
6. 계산식으로 된 문자열을 계산 하는 방법
# 1코딩 참고 용
sum(int(i) for i in my_string.replace(' - ', ' + -').split(' + '))
- 아래는 내가 했던 방법이나 코드를 좀더 줄일수 있다.
- 수학적 접근이 더 필요하다는게 어려운 것 같다.
# 내가 한 코딩
for i in range(0, len(my_string := my_string.split(' ')), 2):
if my_string[i-1] == "-":
answer -= int(my_string[i])
else:
answer += int(my_string[i])
7. math 함수 없이 하는 방법이다.
- 음수를 활용해 소수점을 올리는 것이 가능하다.
- 해당 list의 범위를 넘어서도 슬라이싱은 오류를 내지 않는다.
answer = [my_str[i*n:i*n+n] for i in range(-(-len(my_str)//n))]
8. math를 활용해 서로 다른 n 개중 m개를 뽑는 공식을 사용 가능하다.
# math 활용 참고 용
math.comb(balls, share)
# math없이 했던 내가 한 방법
def Factpor(inNu):
number = 1
for i in range(inNu):
number *= i+1
return number
def solution(balls, share):
n = Factpor(balls)
m = Factpor(share) * Factpor(balls - share)
return n / m
9. 누르는 키보드에 따라서 좌표를 이동 시키는 함수
- 각자의 문자열을 토데로 따로 값을 주었던 방식이다.
# 내가 한 코딩
def solution(keyinput, board):
answer = [0,0]
for key_str in keyinput:
if key_str == 'right' and answer[0] < int(board[0]/2):
answer[0] += 1
elif key_str == 'left' and answer[0] > -int(board[0]/2):
answer[0] -= 1
elif key_str == 'up' and answer[1] < int(board[1]/2):
answer[1] += 1
elif key_str == 'down' and answer[1] > -int(board[1]/2):
answer[1] -= 1
return answer
- 입력 받는 값이 정해져 있을 때, 딕셔너리으로 만든 후 좌표처럼 하면 좀 더 가독성이나 활용 측면에서 좋을것 같다.
# 코딩 참고 용
def solution(keyinput, board):
x_lim,y_lim = board[0]//2,board[1]//2
move = {'left':(-1,0),'right':(1,0),'up':(0,1),'down':(0,-1)}
x,y = 0,0
for k in keyinput:
dx,dy = move[k]
if abs(x+dx)>x_lim or abs(y+dy)>y_lim:
continue
else:
x,y = x+dx,y+dy
return [x,y]
10 .2차 배열에서 해당 리스트에 특정 위치에 max와 min을 사용할수 있다.
# 코딩 참고 용
(max(dots)[0] - min(dots)[0])*(max(dots)[1] - min(dots)[1])
11. := 를 활용해 비교와 동시에 값을 할당하면서 비교하는 연산자
# return에 if와 else를 활용하는것도 가능하다.
if db_pw := dict(db).get(id_pw[0]):
return "login" if db_pw == id_pw[1] else "wrong pw"