Practice/알고리즘

알고리즘 스터디: 양꼬치 , 삼각형의 완성조건(1)

밍미a 2022. 11. 18. 01:36
728x90

알고리즘 스터디 : 양꼬치

https://school.programmers.co.kr/learn/courses/30/lessons/120830

 

프로그래머스

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

programmers.co.kr

 

수줍은 쿼카님 코드:

#머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다.
#양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

def solution(n, k):
    answer = 0
    num = int(n / 10)

    if n >= 10:
        answer = (n * 12000) - ((num - k) * 2000)
    else:
        answer = (n * 12000) + (k * 2000)

    return answer

 

🧡나의 한줄 코멘트 : 음료수 서비스로 몇개 줘야 하는지(num) 구한 후에 (k) 음료수 갯수에서 빼고 계산하는 방식이 흥미로웠다. if문을 사용해서 사고의 흐름이 어떻게 되는지 친절하게 보여주는 코드 같다.


탐스러운 사슴님 코드:

# 양꼬치

def solution(n, k):
    k -= n // 10
    answer = n * 12000 + k * 2000
    return answer

 

🧡나의 한줄 코멘트: += 연산자로 더해주는 것은 종종 봤지만 -= 연산자로 마이너스 값을 만들어서 계산을 해주는 방식이 독특했다. 저렇게도 할 수 있구나..!


게으른 치타님 코드:

def solution(n, k):
    Free_drink = n // 10 
    return (n * 12000) + (k * 2000) - (Free_drink * 2000)

 

🧡나의 한줄 코멘트 : 나랑 가장 비슷한 방식으로 생각해서 짠 코드 같다. 


희망찬 당나귀님 코드:

# 양꼬치
def solution(n, k):
    answer = 0
    answer = n * 12000 + k * 2000
    if int(n / 10) >= 1:
        answer -= int(n / 10) * 2000
    
    return answer

 


내 코드:

#양꼬치

def solution(n, k):
    answer = (n*12000)+(k-int(n/10))*2000
    return answer

 


알고리즘 스터디 : 삼각형의 완성조건(1)

https://school.programmers.co.kr/learn/courses/30/lessons/120889

 

프로그래머스

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

programmers.co.kr

수줍은 쿼카님 코드:

# 선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
#
# 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
# 삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.

def solution(sides):
    sum = 0
    sides.sort()

    if sides[2] < sides[0] + sides[1]:
        return 1
    return 2

 

🧡나의 한줄 코멘트: 코드리뷰를 할 때 삼각형 뿐만 아니라 다른 사각형이나 오각형을 넣어도 돌아갈 수 있도록 확장성을 생각해서 표현하고 싶다는 말이 인상깊었다.


탐스러운 사슴님 코드:

삼각형의 완성조건 (1)

def solution(sides):
    sides.sort()
    if sides[0] + sides[1] > sides[2]: # sides.sum() - sides.max() > sides.max()
        return 1
    return 2

 

🧡나의 한줄 코멘트: 인덱스를 활용해서 접근한 방법이 흥미로웠다. 특히 sort함수를 이용해서 접근하면 가장 큰 값이 앞으로 정렬되니까 인덱스를 사용할 수 있는것이구나...! 하고 sort()함수의 활용법을 다시한번 알게 되었다.

 


게으른 치타님 코드:

#선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
#가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
#삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.

def solution(sides):
    
    
    if max(sides) < sum(sides) - max(sides):
        return 1
    else:
        return 2

 

🧡나의 한줄 코멘트: max와 sum 함수를 사용해서 굉장히 간단하게 코드를 구현한 것이 인상깊었다. 리턴값이 하나밖에 없으니까 이 코드는 삼항연산자로 한줄로 줄일 수 있어보인다.


희망찬 당나귀님 코드:

#삼각형의 완성조건 (1)
def solution(sides):
    sides.sort()
    if sides[-1] < sum(sides) - sides[-1]:
        answer = 1
    else:
        answer = 2
    return answer
# def find maxnum(sides):
#         maxnum = sides[0]
#         for num in sides:
#             if num > maxnum:
#                 maxnum = num
# def solution(sides):
#     if maxnum < sum(sides) - maxnum:
#         answer = 1
#     else:
#         answer = 2
#     return answer

 

🧡나의 한줄 코멘트 : 주석처리 함으로 써 고민한 흔적이 보이는 코드이다. 연습할때는 저렇게 내가 시도했던 코드들을 주석으로 남겨놓는것도 좋을 것 같다. 내가 짠 코드를 나중에 보고 수정해볼 수도 있고 좋은 방법인 것 같다.

 


내 코드:

#삼각형의 완성조건 (1)

def solution(sides):
    answer = 0
    max_1 = int(max(sides))
    a,b,c = map(int,sides)
    if a == max_1:
        if b+c > a:
            answer = 1
        else:
            answer = 2
    elif b == max_1:
        if a+c > b:
            answer = 1
        else:
            answer = 2
    else:
        if a+b > c:
            answer = 1
        else:
            answer = 2
    return answer

 

🧡나의 한줄 코멘트: 시간이 부족해서 규칙성을 찾아내지 못하고 if else문으로 하나하나 입력해줬다. 이런 코드를 하드코딩이라고 하는것 같던데 다른 사람들이 짠 코드와 비교해보니 확실히 안좋은 코드라는것을 알 수 있었다. 다음에 시간내서 천천히 생각해보고 다시 풀어보는 과정이 필요할 것 같다.

 


느낀점

 

알고리즘 스터디를 시작했다.  매일 1시간씩 시간을 정해놓고 두문제의 알고리즘 문제를 풀어본 후에 1시간씩 서로 푼 문제를 발표하며 자신의 풀이법에 대해 이야기 나누는 시간을 가지기로 했다.

오늘 처음으로 스터디를 진행해봤는데 굉장히 유익한 시간이었다. 같은 문제를 푸는데 생각하는 사고방식이 다 달라서 미묘하게 코드가 다른것을 확인 할 수 있었다. 내가 해결하지 못했던 문제를 효율적으로 해결하는 모습을 보면서 다른사람이 푼 알고리즘 코드를 분석해서 언젠간 나도 활용할 수 있도록 내것으로 만들어야겠다고 생각했다.