TIL
231025 프로그래머스 문제풀기
유초23
2023. 10. 25. 23:00
728x90
빨리 끝내고 싶닥 !
화이탱 !
* 분수의 덧셈 문제에서는
def solution(numer1,denom1,numer2,denom2):
numer1/denom1 + numer2/denom2 = numer/denom
for i in range(2,1000):
if numer % i == 0 and denom % i == 0:
numer = numer//i
denom = denom//i
return [numer,denom]
이런식으로 풀어보려고 시도는 했지만 처참히 실패 ^^ ...
최대공약수인 gcd함수를 사용해야 하는 문제여똬 ,,
math를 import하는 방법이 있고 그렇지 않은 방법이 있다 !
첫번째 방법을 사용하면
import math
def solution(numer1,denom1,numer2,denom2):
numer = denom1*numer2 + denom2*numer1
denom = denom1*denom2
gcd = math.gcd(numer,denom)
return [numer//gcd , denom//gcd]
이렇게 문제를 해결할 수 있고,
두번째 방법으로는
def gcd(a,b):
while b > 0:
a,b = b,a%b
return a
def solution(numer1,denom1,numer2,denom2):
numer = denom1*numer2 + denom2*numer1
denom = denom1*denom2
g = gcd(denom,numer)
return [numer//g , denom//g]
이렇게 문제를 해결할 수 있다 !
* 연속된 수의 합 문제는
def solution(num,total):
result = []
if num % 2:
for i in range(num):
p = total//num + (num-1)//2
p -= i
result.append(p)
else:
for i in range(num):
p = total//num + num//2
p -= i
result.append(p)
return sorted(result)
이렇게 문제를 해결하였는데,
아주 간결한 코드가 있어 가져와봤다 !
def solution(num, total):
return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]
두줄로 코드를 완성하다니 ..
대 다 내 ...

그 외에도 이 문제는 각자 생각한 대로 다양한 답들이 있는 것 같다 !
* 주사위 게임 3 문제는
안풀려서 구글링을 했는데 ,,
음 ...
몇개의 깔끔한 코드들을 봤는데 이해가 안가는 부분들이 있어서 이건 따로 물어보거나 해야될 듯 하다 !

* 안전지대 문제는
구글링을 통해 이해하고 문제를 해결하였돠 ..
def solution(board):
n = len(board)
for x,row in enumerate(board):
for y,area in enumerate(row):
if area == 1:
for dx in [-1,0,1]:
for dy in [-1,0,1]:
nx = x + dx
ny = y + dy
if 0 <= nx < n and 0 <= ny < n and board[nx][ny] != 1:
board[nx][ny] = "X"
safe_count = sum([area.count(0) for area in board])
return safe_count
이 문제 역시 enumerate함수를 사용해야 하는 문제여따 ,,
enumerate함수 .... 너 굉장한 아이구나 ..
점점 갈수록 풀이도 어려워지는 것 같ㄷㅏ ...... 됴륵 ....
더 깔끔한 풀이로는
def solution(board):
n = len(board)
danger = set()
for i, row in enumerate(board):
for j, x in enumerate(row):
if not x:
continue
danger.update((i+di, j+dj) for di in [-1,0,1] for dj in [-1, 0, 1])
return n*n - sum(0 <= i < n and 0 <= j < n for i, j in danger)
이런 풀이도 있었는데,
마지막에 sum을 빼줄때 지뢰가 있는 1 부분도 같이 빠지는건지 ?-? 한 상태이긴 하다 ,,
물어봐야쥐 ,,,
오늘은 여기까지 !
화이팅하자고 ~!~~
728x90