
프로그래머스 코딩테스트 입문 Java로 Day 24 수학 시뮬레이션 문자열 조건문 반복문 풀기
프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.
제한사항
chicken은 정수입니다.chicken ≤ 1,000,000입출력 예
| chicken | result |
|---|---|
| 100 | 11 |
| 1,081 | 120 |
class Solution {
public int count_coupon = 0; // 남은 쿠폰 수
public int count_chicken = 0; // 총 서비스 치킨 수
public int service = 0; // 한 번에 나온 서비스 수
public int solution(int chicken) {
int answer = -1;
coupon(chicken);
answer = count_chicken;
return answer;
}
public void coupon(int chicken) {
service = chicken / 10;
count_coupon += chicken % 10;
count_chicken += service;
if (service != 0) coupon(service);
while (count_coupon / 10 >= 1) {
count_chicken += count_coupon / 10;
count_coupon = (count_coupon % 10) + (count_coupon / 10);
}
return;
}
}
재귀 문제로 적합한 문제
EX) 1081번 시켜먹은 치킨
coupon(1081)
1081번에서 나온 서비스 수: 108번
남은 쿠폰 수: 1개
총 서비스 치킨 수: 108번
coupon(108)
108번에서 나온 서비스 수: 10번
남은 쿠폰 수: 1+8개
총 서비스 치킨 수: 108+10번
coupon(10)
10번에서 나온 서비스 수: 1번
남은 쿠폰 수: 1+8+0개
총 서비스 치킨 수: 108+10+1번
coupon(1)
1번에서 나온 서비스 수: 0번
남은 쿠폰 수: 1+8+0+1개
총 서비스 치킨 수: 108+10+1+0번
남은 쿠폰 수가 10개 이상 이라면
총 서비스 치킨 수: 108+10+1+0+1번
남은 쿠폰 수: 0개
이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
bin1, bin2의 길이 ≤ 10bin1과 bin2는 0과 1로만 이루어져 있습니다.bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.입출력 예
| bin1 | bin2 | result |
|---|---|---|
| "10" | "11" | "101" |
| "1001" | "1111" | "11000" |
import java.util.*;
class Solution {
public String solution(String bin1, String bin2) {
String answer = "";
answer = Integer.toBinaryString(Integer.parseInt(bin1, 2) + Integer.parseInt(bin2, 2));
return answer;
}
}
Integer.toBinaryString(int i): 10진수 → 2진수 String
Integer.parseInt(String s, int radix): 16진수 → 10진수 int
만약 16진수라면 radix가 16이 되고 2진수나 8진수가 되면 각각 2, 8을 대입하면 됨.
문자열 before와 after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.
제한사항
before의 길이 == after의 길이 < 1,000before와 after는 모두 소문자로 이루어져 있습니다.입출력 예
| before | after | result |
|---|---|---|
| "olleh" | "hello" | 1 |
| "allpe" | "apple" | 0 |
class Solution {
public int solution(String before, String after) {
int answer = 1;
int[] before_arr = new int[26];
int[] after_arr = new int[26];
for (int i = 0; i < before.length(); i++) {
before_arr[(int)before.charAt(i)-97]++;
after_arr[(int)after.charAt(i)-97]++;
}
for (int i = 0; i < before_arr.length; i++) {
if (before_arr[i] != after_arr[i]) return 0;
}
return answer;
}
}
before의 순서를 바꾸라는게 순서를 뒤집으라는게 아니라 글자를 이리저리 옮기라는 뜻임.
즉, before의 알파벳 구성이 after의 알파벳 구성과 같으면 됨.
1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.
제한사항
i < j ≤ 100,000k ≤ 9입출력 예
| i | j | k | result |
|---|---|---|---|
| 1 | 13 | 1 | 6 |
| 10 | 50 | 5 | 5 |
| 3 | 10 | 2 | 0 |
class Solution {
public int solution(int i, int j, int k) {
int answer = 0;
for (int a = i; a <= j; a++) {
String str = Integer.toString(a);
for (int b = 0; b < str.length(); b++) {
int ch = str.charAt(b) - 48;
if (ch == k) answer++;
}
}
return answer;
}
}
1) 4문제 남았다!
2) 기록표
