본문 바로가기
[코딩테스트] 혼자서 해보기😂

[스터디] 프로그래머스 연습문제 풀이

by 혜o_n 2022. 12. 22.

콜라 문제 #132267

 

빈 병 a개를 가져다주면 콜라 b병을 주는 마트가 있을 때, 빈 병 n개를 가져다주면 몇 병을 받을 수 있는지 계산하는 문제입니다. 기존 콜라 문제와 마찬가지로, 보유 중인 빈 병이 a개 미만이면, 추가적으로 빈 병을 받을 순 없습니다. 상빈이는 열심히 고심했지만, 일반화된 콜라 문제의 답을 찾을 수 없었습니다. 상빈이를 도와, 일반화된 콜라 문제를 해결하는 프로그램을 만들어 주세요.

콜라를 받기 위해 마트에 주어야 하는 병 수 a, 빈 병 a개를 가져다 주면 마트가 주는 콜라 병 수 b, 상빈이가 가지고 있는 빈 병의 개수 n이 매개변수로 주어집니다. 상빈이가 받을 수 있는 콜라의 병 수를 return 하도록 solution 함수를 작성해주세요.

 

처음에는 

고치기 전

num_cola : 받은 병의 개수,  n : 남은 빈 병의 개수 

처음 가지고 있는 콜라의 개수를 a로 나눈 몫에 b 만큼 곱한 값이 내가 새로 받은 병의 개수가 된다. 

그래서 받은 병의 개수를 b * ( n // a)를 더하는 걸로 업데이트 시킨다.

그 다음 남아있는 병의 개수는 새로 받은 병의 개수에다가 a로 나눈 후의 나머지를 추가하면 된다.

가지고 있는 병의 개수가 a 미만이 될때까지 계속 반복해야 하므로 while구문을 사용하고 조건은 n >= a를 사용! 

 

b = 1일 때는 저 코드가 문제없이 잘 실행되지만

b가 1이 아닌 다른 숫자가 되기 시작하면 바로 틀려버린다,,

--------------------------------------------------------------------------------------------------------------------------------------------------------

고친 후

바보처럼 7번째 줄에서 n // a 에 b를 안곱해서 생긴 문제였다

b를 안곱해서 b=1이면 참이 되지만 1이 아닌 다른 값을 가지면 답이 나오지 않았던 것!

 

그리고 While 제어문을 사용할 때 

while < 조건문 > :

이 때는 조건문이 참일 때만 코드가 실행되는 것이다!

따라서 실행시키려고 하는 변수의 범위를 조건문으로 사용해야 하는 것!!

 

분수의 덧셈 #120808 

 

첫 번째 분수의 분자와 분모를 뜻하는 denum1, num1, 두 번째 분수의 분자와 분모를 뜻하는 denum2, num2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해주세요.

 

분수의 덧셈을 생각해보면

분모는 더하는 두 수의 분모끼리의 곱이고, 분자는 더하는 수 중 (첫번째 수의 분모와 두번째 수의 분자의 곱), (첫번째 수의 분자와 두번째 수의 분모의 곱)의 합이므로 

denum = num1 * denum2 + denum1 * num2
 num = num1 * num2 

으로 설정했다.

그 다음 분수는 약분을 한 후에 return으로 내보내 줘야 하기 때문에

math에서 최대공약수 gcd를 불러온 후에 결과의 분모, 분자를 최대공약수로 나눠준 걸로 업데이트!

 

근데 import math를 안쓰고 해결하고 싶은데 최대공약수를 어떻게 만들어야하는지 모르겠어서 멈춰버림,,

---------------------------------------------------------------------------------------------------------------------------------------------

최대공약수라는 것 자체가 두 숫자를 동시에 약분하는 수 중 가장 큰 수이므로

denum도 나누고, num도 나누는 숫자들의 리스트를 만든 후 리스트에서 가장 큰 값을 구하면 최대공약수가 된다.

최종본 :

두 정수 사이의 합 #12912

 

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

 

고치기

처음 코드를 작성할 때에는 2번째, 3번째 줄을 빼먹었는데

저렇게 하니까 만약에 b가 a보다 클 때에는 5번째 줄에서 에러가 발생해버린다.

위의 식처럼 하니까 2번째 줄에서 이미 a가 업데이트 되어버려서 a, b가 같은 값을 가져버리는 경우도 발생

-----------------------------------------------------------------------------------------------------------------------------------------------

고친 후

그래서 아예 새로운 변수 a_와 b_로 가지고 와서 넣으니 성공

댓글