고양이와 코딩

[프로그래머스] 10월 9일 ~ 본문

python

[프로그래머스] 10월 9일 ~

ovovvvvv 2023. 10. 9. 18:28
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... 종료

이런식으로!! 조건을 걸어준당