
프로그래머스 코딩테스트 입문 Java로 Day 18 문자열 수학 조건문 정렬 풀기
문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.
제한사항
str1의 길이 ≤ 100str2의 길이 ≤ 100입출력 예
| str1 | str2 | result |
|---|---|---|
| "ab6CDE443fgh22iJKlmn1o" | "6CD" | 1 |
| "ppprrrogrammers" | "pppp" | 2 |
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
if (str1.indexOf(str2) == -1) answer = 2;
else answer = 1;
return answer;
}
}
어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.
제한사항
n ≤ 1,000,000입출력 예
| n | result |
|---|---|
| 144 | 1 |
| 976 | 2 |
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
List<Integer> list = new ArrayList<>();
for (int i = 1; (i*i) <= n; i++) {
list.add(i*i);
}
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == n) answer = 1;
else answer = 2;
}
return answer;
}
}
이거는 배열에 넣지 않아도 방법이 있어보여서 다른 코드를 찾아봄.
class Solution {
public int solution(int n) {
int answer = 0;
Double sqrt = Math.sqrt(n);
if(sqrt == sqrt.intValue()) {
answer = 1;
} else {
answer = 2;
}
return answer;
}
}
우선 n의 제곱근을 구해 sqrt 변수에 넣음.
그리고 sqrt와 sqrt를 intValue()한 값을 비교함.
intValue(): static이 아니며 Integer 객체에서 int형 값을 뽑아내는 메소드임.
Integer은 int Value와 String Value 두 가지가 있음.
이 때, double에서 int를 갈 때 intValue()를 사용한다면 무조건 내림 처리를 함. → 반올림이 하고 싶다면 Math.round() 사용
double과 int를 비교할 때는 소수점에 어떠한 값도 있으면 안될 것.
EX 1) n = 144
sqrt = 12.0
sqrt.intValue() = 12
⇒ result = 1
EX 2) n = 976
sqrt = 31.240998703626616
sqrt.intValue() = 31
⇒ result = 2
어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.
제한사항
n ≤ 10t ≤ 15입출력 예
| n | t | result |
|---|---|---|
| 2 | 10 | 2048 |
| 7 | 15 | 229,376 |
class Solution {
public int solution(int n, int t) {
int answer = n;
for (int i = 0; i < t; i++) {
answer *= 2;
}
return answer;
}
}
Math.pow()를 사용해서 풀 수 있을 것 같아서 그 부분의 코드를 찾아봄.
class Solution {
public int solution(int n, int t) {
return n * (int)Math.pow(2, t);
}
}
몰랐는데 Math.pow()의 리턴값이 double이라서 (int)를 붙여 int로 바꿔줘야 함.
영어 대소문자로 이루어진 문자열 my_string이 매개변수로 주어질 때, my_string을 모두 소문자로 바꾸고 알파벳 순서대로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요.
제한사항
my_string 길이 < 100입출력 예
| my_string | result |
|---|---|
| "Bcad" | "abcd" |
| "heLLo" | "ehllo" |
| "Python" | "hnopty" |
import java.util.*;
class Solution {
public String solution(String my_string) {
String answer = "";
char[] arr = my_string.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (arr[i] <= 90) arr[i] = (char)((int)arr[i] + 32);
}
Arrays.sort(arr);
answer = new String(arr);
return answer;
}
}
다른 사람의 풀이를 봤는데 toLowerCase()를 사용함.
import java.util.*;
class Solution {
public String solution(String my_string) {
char[] c = my_string.toLowerCase().toCharArray();
Arrays.sort(c);
return new String(c);
}
}
toLowerCase(): 대문자 → 소문자
Arrays.sort는 배열 상태에서만 가능하므로 toCharArray()가 따라와야 함.
collect을 사용한 코드도 있었는데 아직 거기까지의 실력이 아닌 것 같음..
1) 확실히 남의 코드랑 비교하니깐 + 내 코드의 공통점들을 보니깐 무조건 반복문에 가두는 게 좋은 방법은 아니라는 걸 깨달았다. 문법 공부를 좀 해야겠다.
2) 기록표
