📑 문1) 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
제한사항
입출력 예
t | p | result |
---|---|---|
"3141592" | "271" | 2 |
"500220839878" | "7" | 8 |
"10203" | "15" | 3 |
입출력 예 설명
입출력 예 #2
입출력 예 #3
나의 풀이
package programmers;
public class SubString {
public static int solution(String t, String p) {
int answer = 0;
for(int i = 0; i < t.length() - p.length() + 1; i++) {
String temp = t.substring(i, i+p.length());
if(Long.parseLong(temp) <= Long.parseLong(p)) {
answer++;
}
}
return answer;
}
public static void main(String[] args) {
solution("3141592","271");
}
}
나의 생각
Lv.0 -> Lv.1
로 오면서, 정답률이 낮은 문제부터 풀었는데, 역시... step by step
이라고 한걸음 씩 나아가는게 맞는거같다.
문제의 요구사항에서 매개변수 String t
를 String p
의 자릿수로 짤라 p의 값보다 작거나 같은 것이 나오는 횟수를 구하는 문제이기때문에, 아래와 같이 t를 문제에서 원하는 값으로 가공하는게 중요 포인트였다. p = 271
이므로 271보다 작거나 같은 값을 검출하면 되는줄 알았다.
처음에는 Integer.parseInt
로 int형으로 형변환하여 문제를 풀었지만, p의 길이 ≤ t의 길이 ≤ 10,000
제한사항의 조건이 커질 수 있기때문에 이를 해결하기 위해 10자리 수 까지 표현할 수 있는 Integer
보다 값의 범위가 보다 큰 Long
타입(19자리수)를 사용하였다.
종류 | 설명 | 저장 공간 | 값의 범위(최소값~최대값) |
---|---|---|---|
int | 부호 있는 정수 | 32 bits | -2,147,483,648 ~ 2,147,483,647 |
long | 부호 있는 정수 | 64 bits | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
if(Long.parseLong(temp) <= Long.parseLong(p)) {
answer++;
}
📑 문2) 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.
제한사항
입출력 예
n | result |
---|---|
10 | 3 |
12 | 11 |
입출력 예 설명
10을 3으로 나눈 나머지가 1이고, 3보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 3을 return 해야 합니다.
12를 11로 나눈 나머지가 1이고, 11보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 11을 return 해야 합니다.
나의 풀이
package programmers;
public class Remain {
public static int solution(int n) {
int x = 1;
while(true) {
x++;
if(n % x == 1) {
break;
}
}
return x;
}
public static void main(String[] args) {
solution(997);
}
}
📑 문3) 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한 사항
입출력 예
n | return |
---|---|
12 | 28 |
5 | 6 |
입출력 예 설명
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.
나의 풀이
package 프로그래머스;
public class SumOfDivisors {
public static int solution(int n) {
int answer = 0;
for(int i = n; i > 0; i--) {
if(n % i == 0) {
answer +=i;
}
}
System.out.println(answer);
return answer;
}
public static void main(String[] args) {
solution(12);
}
}
📑 문4) 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
제한조건
입출력 예
x | n | answer |
---|---|---|
2 | 5 | [2,4,6,8,10] |
4 | 3 | [4,8,12] |
-4 | 2 | [-4,-8] |
package programmers;
public class SpacedNumber {
public static long[] solution(int x, int n) {
long[] answer = new long[n];
for(int i = 0; i < n; i++) {
answer[i] = x*(long)(i+1);
}
return answer;
}
public static void main(String[] args) {
solution(0,2);
}
}
📑 문5) 정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.
제한 조건
num은 int 범위의 정수입니다.
0은 짝수입니다.
num | return |
---|---|
3 | "odd" |
4 | "even" |
나의 풀이
package programmers;
public class OddEven {
public static String solution(int num) {
return num % 2 == 0 ? "Even" : "Odd";
}
public static void main(String[] args) {
solution(0);
}
}