728x90

치킨 10마리면 1마리 서비스 

주어진 주문 횟수로 서비스 치킨을 얼마나 더 시킬 수 있는지 반환 

public int solution(int chicken) {

int answer = 0;

int coupon = chicken;

answer = R(coupon,answer);

return answer;

}

private int R(int coupon, int answer) {

int chicken = coupon/10;

answer+=chicken;

coupon-=chicken*10;

coupon+=chicken;

if(coupon>=10) {

return R(coupon,answer);

}

return answer;

}

재귀함수를 이용하여 시킨 치킨 수를 모두 쿠폰으로 반환하고 쿠폰 10번이면 answer를 증가시키고 coupon을 감소시키고  동시에 쿠폰도 증가시켰다. 

쿠폰이 10보다 작아질때까지 계속했다. 

 

다른 풀이 보는데 그냥 while문으로 쉽게 푼듯하다..

재귀함수도 어차피 반복문으로 풀 수 있는데 재귀함수 배우고 나서 이런문제는 재귀함수로 접근해야한다는 강박이 생긴것 같다...

public int solution2(int chicken) {

int coupon = chicken;

int answer = 0;

while (coupon >= 10) {

answer += coupon / 10;

coupon = coupon % 10 + coupon / 10;

}

return answer;

}

아래 코드는 아예 계산을 해서 답을 구했다.

public int solution3(int chicken) {

int answer = chicken/9;

if(chicken>1&&chicken%9==0){

answer--;

}

return answer;

}

10번 시키고 난 후부터는 9번만 시키면 1번을 서비스로 먹을 수 있다. 

9번 시켰을 떄는 최초 10번에 달성하지 못해 치킨을 9로 나는 값이 답이 아니라 -1 해줘야 한다. 

반면 10번 시켰을 땐 answer=1이 맞고 

18번 시켰을 때도 한번이 부족해서 시키지 못하기 때문에  answer-1해줘야한다. 

19번 시켰을땐 answer=2가 맞다.

즉 9의 배수일때는 answer에서 하나 빼줘야 한다. 

'Java > Coding Test' 카테고리의 다른 글

소수찾기 문제풀이  (0) 2023.09.18
소인수분해 문제풀이  (0) 2023.09.18
유한소수 판별하기 문제풀이  (0) 2023.09.17
저주의 숫자 3 문제풀이  (0) 2023.09.17
문자열 밀기 문제풀이  (0) 2023.09.17
728x90

유한소수인지 판별하여 맞으면 1 틀리면 2 반환 

유한소수이기 위한 조건 :  기약분수일 때 분모의 소인수는 2, 5만 존재해야한다.

public int solution(int a, int b) {

int answer = 0;

while(b%2==0||b%5==0){

if(b%2==0){

b/=2;

}

if(b%5==0){

b/=5;

}

}

return (a%b==0)? 1:2;

}

b(분모)가 기약분수일 때 2와 5만 남는다는 건 a(분자)의 소인수 중 분모의 소인수와 겹치는 수가 약분되고 남는 수가 2와 5

> b에서 2와 5로 나누어떨어질때까지 계속 나누고 남은 수는 A를 나누었을때 나누어 떨어져야 한다. 

 

 

'Java > Coding Test' 카테고리의 다른 글

소인수분해 문제풀이  (0) 2023.09.18
치킨 쿠폰 문제풀이  (0) 2023.09.17
저주의 숫자 3 문제풀이  (0) 2023.09.17
문자열 밀기 문제풀이  (0) 2023.09.17
다항식 더하기 문제풀이  (0) 2023.09.17
728x90

3의 배수나 3이 들어간 수를 쓰지 않을 때 10진수를 표현한 수는? 

public int solution(int n) {

int answer = 1;

int count = 1;

do{

if((answer+"").contains("3")||answer%3==0){

answer= answer+ 1;//하고 나서도 다시 체크

count--;

}else{

if(count==n)break;

answer = answer+1;

}

 

count++;

}while(count<=n);

return answer;

}

answer를 증가시키는데 3이나 3의 배수인 수는 count를 감소시켜 한번더 체크하여 answer를 증가시키도록 

 

public int solution2(int n) {

int answer = 0;

for(int i=0; i<n; i++) {

answer++;

if((answer+"").contains("3")||answer%3==0)i--;

}

return answer;

}

for문으로 간단하게 만드는 방법도 있다..

'Java > Coding Test' 카테고리의 다른 글

치킨 쿠폰 문제풀이  (0) 2023.09.17
유한소수 판별하기 문제풀이  (0) 2023.09.17
문자열 밀기 문제풀이  (0) 2023.09.17
다항식 더하기 문제풀이  (0) 2023.09.17
OX 퀴즈 문제풀이  (0) 2023.09.17
728x90

주어진 첫번째 문자열을 오른쪽으로 밀었을때 주어진 두번째과 동일하게 된다면 밀었던 횟수를 반환 그렇지 않으면 -1을 반환 

public int solution(String A, String B) {

int answer = 0;

int len = A.length();

A=A+A;

for (int i = 0; i < len; i++) {

String t =A.substring(len-i,2*len-i);

if(t.equals(B))return i;

}

return -1;

}

A문자열을 두번 이어붙여 이어지는 문자열 중 B와 일치하는 문자열이 있는지 확인

 

다른 사람풀이를 보았는데

public int solution2(String A, String B) {

return (B+B).indexOf(A);

}

그냥 B를 붙여서 A를 찾는다... indexOf()는 어차피 실패하면 -1을 반환해준다.

'Java > Coding Test' 카테고리의 다른 글

유한소수 판별하기 문제풀이  (0) 2023.09.17
저주의 숫자 3 문제풀이  (0) 2023.09.17
다항식 더하기 문제풀이  (0) 2023.09.17
OX 퀴즈 문제풀이  (0) 2023.09.17
연속된 수의 합 문제풀이  (0) 2023.09.17

+ Recent posts