고양이와 코딩
[프로그래머스] 10월 9일 ~ 본문
728x90
[2023.10.9]
문제
def solution(before, after):
before_word = list(before)
after_word = list(after)
before_word.sort()
after_word.sort()
if before_word == after_word:
return 1
else:
return 0
list로 문자열을 문자로 분리한것까진 좋았으나, sort를 사용하지 않으면 순서가 달라서 if문에서 인식하지 못함!
sort로 순서대로 정렬 후 비교하기
[2023.10.11]
문제
처음 접근 방법
각 start-end의 절댓값 길이에서 다른 선분의 절댓값 길이를 뺐을때.. 어쩌고.. <<개소리
당연히 안되는건데 ㅜㅜ level0인것치고 너무 접근 방법이 생각이 잘 안났다...
진짜 코테를 가뭄에 콩 나듯 하니 수학적 사고력이 너무 박살 난 기분이다..
정답 접근 방법
어쨌든 겹치는 길이니까 -> 교집합? 교집합을 다 더해서 그 범위를 answer에 추가하면 되지 않을까?
로 구글 검색을 해서 풀었습니다.
def solution(lines):
answer = 0
line1 = set(range(lines[0][0], lines[0][1]))
line2 = set(range(lines[1][0], lines[1][1]))
line3 = set(range(lines[2][0], lines[2][1]))
answer = list(line1 & line2 | line1 & line3 | line2 & line3 )
return len(answer)
line은 set(집합) 함수를 사용해서 각각의 범위 안의 정수를 뽑아내고 (ex , line1 = { 0, 1, 2})
교집합으로 범위 안의 정수를 추린 후 모두 더해서 answer에 넣는다!! 그리고 길이를 return
문제2
첫 번째 코드
import math
def solution(a, b):
gcd = math.gcd(a,b)
new_a = a / gcd
new_b = b / gcd
if new_b % 2 == 0 or new_b % 5 == 0:
return 1
else:
return 2
이렇게 하면 모든 테스트 케이스를 통과할 수 없다..
당연함!! 소인수가 2, 5말고 다른것도 있을 수 있으니까, 근데 조건을 어떻게 넣어줘야 할지 몰랐다.
정답
import math
def solution(a, b):
gcd = math.gcd(a,b)
new_a = a / gcd
new_b = b / gcd
while new_b % 2 == 0:
new_b /= 2
while new_b % 5 == 0:
new_b /= 5
if new_b == 1:
return 1
else:
return 2
while문을 추가해서 new_b가 2,5로 나눈 나머지가 없을 경우 + 2와 5로만 나누어 떨어지는지를 계속해서 계산한다.
예를들어 new_b가 20이면 20 / 2 = 10 , 10 / 2 = 5 여기서 첫 번째 while문 종료 그리고 5 / 5 = 1... 종료
이런식으로!! 조건을 걸어준당
'python' 카테고리의 다른 글
[프로그래머스] 10월 18일 ~ (0) | 2023.10.19 |
---|---|
[프로그래머스] 저주의 숫자 3.py (0) | 2023.08.12 |
[프로그래머스] 외계어 사전.py (0) | 2023.07.27 |
[프로그래머스] 정수 부분.py (0) | 2023.06.24 |
[프로그래머스] 직사각형의 넓이 구하기 (0) | 2023.05.22 |