아자아자 화이팅이닷 !

231026 프로그래머스 문제풀기 본문

TIL

231026 프로그래머스 문제풀기

유초23 2023. 10. 27. 00:15
728x90

* 겹치는 선분의 길이 문제는

 

처음에

 

def solution(lines):
    count = 0
    for i in range(len(lines)-1):
        if lines[-1][0] < lines[i+1][0] and lines[i+1][0] < lines[i][1]:
            count += lines[i+1][1] - lines[-1][0]
        elif lines[i+1][0] < lines[i][1]:
            count += lines[i][1] - lines[i+1][0]
    return count

 

이런식으로 접근을 해서 풀려고 했는데, 테스트 케이스는 하나가 통과가 되지 않았다 ..!

근데 생각을 해보니 순서를 바꾸면 저 코드는 틀린게 되는것이었돠 ..

 

그래서 구글링을 해봤는데,,

음 ... 어려웠다 ㅠ

 

def solution(lines):
    result = 0
    count = [0 for _ in range(200)]
    for line in lines:
        for i in range(line[0],line[1]):
            count[i+100] += 1
    result += count.count(2)
    result += count.count(3)
    return result

 

이 풀이가 나한테는 이해가 그나마 되는 풀이였다 ㅠ

 

해설은

https://dduniverse.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B2%B9%EC%B9%98%EB%8A%94-%EC%84%A0%EB%B6%84%EC%9D%98-%EA%B8%B8%EC%9D%B4-%ED%8C%8C%EC%9D%B4%EC%8D%AC-python

 

프로그래머스 | 겹치는 선분의 길이 [파이썬 python]

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 def

dduniverse.tistory.com

 

이 블로그가 도움이 많이 되었다 !

 

다른 풀이로는

 

def solution(lines):
    s1 = set(i for i in range(lines[0][0], lines[0][1]))
    s2 = set(i for i in range(lines[1][0], lines[1][1]))
    s3 = set(i for i in range(lines[2][0], lines[2][1]))
    return len((s1 & s2) | (s2 & s3) | (s1 & s3))

 

이 풀이와

 

def solution(lines):
    sets = [set(range(min(l), max(l))) for l in lines]
    return len(sets[0] & sets[1] | sets[0] & sets[2] | sets[1] & sets[2])

 

이 풀이가 있었는데,

확실하게 이해가 되지는 않았돠 ㅠ

물어봐야지 ,, ㅜㅜ


* 평행 문제는

 

def solution(dots):
    if (dots[0][1] - dots[1][1]) / (dots[0][0] - dots[1][0]) == (dots[2][1] - dots[3][1]) / (dots[2][0] - dots[3][0]):
        return 1
    elif (dots[0][1] - dots[2][1]) / (dots[0][0] - dots[2][0]) == (dots[1][1] - dots[3][1]) / (dots[1][0] - dots[3][0]):
            return 1
    elif (dots[0][1] - dots[3][1]) / (dots[0][0] - dots[3][0]) == (dots[2][1] - dots[1][1]) / (dots[2][0] - dots[1][0]):
        return 1
    else:
        return 0

 

이렇게 해결하였는데,

처음에 기울기가 되는 선의 길이를 추가로 조건으로 주어서 조금 헤맸다 ㅋ.ㅋ ...

그래도 풀었당 ! 희희

신 나 부 러

 

 

내가 짠 코드보다 간결한 코드가 있어 가져와봤다 !

 

def solution(dots):
    [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]=dots
    answer1 = ((y1-y2)*(x3-x4) == (y3-y4)*(x1-x2))
    answer2 = ((y1-y3)*(x2-x4) == (y2-y4)*(x1-x3))
    answer3 = ((y1-y4)*(x2-x3) == (y2-y3)*(x1-x4))
    return 1 if answer1 or answer2 or answer3 else 0

 

이렇게 아예 배열을 dots라는 배열로 묶어버리면 더 간결하게 풀 수 있었다 !

와 웅 ~


* 정수를 나선형으로 배치하기 문제는

 

감이 안와서 구글링을 했는데,,

그나마 직관적인 코드가

 

https://sefact.github.io/posts/181832/

 

[프로그래머스] 정수를 나선형으로 배치하기

[unrated] 정수를 나선형으로 배치하기 - 181832

sefact.github.io

 

이 코드였지만,,

확실하게 이거다 ! 하고 이해가 되지 않았다 ㅠ

다른 코드들은 해설이 없어서 이해하기도 힘듦 ㅜ 뿌에엥 ....

이것도 물어봐야겠다 .....

 

슬 펑 ..!


* 옹알이(1) 문제는

 

혼자 노가다 (?) ㅎㅎ.. 를 하다가 이건 아니다 싶어서 구글링 ..

 

def solution(babbling):
    result = 0
    says = ["aya","ye","woo","ma"]

    for i in range(len(babbling)):
        for say in says:
            if say in babbling[i]:
                babbling[i] = babbling[i].replace(say,"*")
        if all(char == "*" for char in babbling[i]):
            result += 1
    return result

 

내 기준 좋은 풀이라고 생각이 든다 !

귣 !


일단 입문은 다 풀었닥 !

기 쁘 다 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

옝ㅇㅇ ~~~~~~~~~~

기초 두문제가 남았는데 다른 사람의 도움을 받아야 해결 가능할 것 같당 ..

그래도 잘해따 ! 우히히

화이팅 ~!~~~~

728x90