95. 잘라서 배열로 저장하기
class Solution {
public String[] solution(String my_str, int n) {
int numlength = 0;
if(my_str.length() % n == 0){
numlength = my_str.length()/n;
}else {
numlength = my_str.length()/n + 1;
}
String[] answer = new String[numlength];
for(int i=0; i<numlength; i++){
if(my_str.length() >= n){
answer[i] = my_str.substring(0, n);
my_str = my_str.substring(n, my_str.length());
}else {
answer[i] = my_str.substring(0, my_str.length());
}
}
return answer;
}
}
<작성한 코드>
배열의 길이를 지정해 주기 위해 먼저 if문으로 설정해 줬다. 만약 my_str을 n으로 나눴을 때 딱 떨어지면 그 몫을 배열의 길이로 사용하면 되고, 나눠 떨어지지 않는다면 나눈 몫에 +1을 해줘서 크기를 지정해 줬다. 그 뒤 for문으로 길이만큼 반복시켜 주고 조건을 걸었다. 만약 my_str의 길이가 n보다 크거나 같으면 answer배열의 i번째에 my_str를 0부터 n번까지 잘라서 집어넣어 줬다. 그 뒤 my_str에는 자른 나머지를 다시 대입해 줬다. 만약 my_str의 남은 배열의 길이가 n보다 작으면 my_str에 남은 모든 수를 넣어준 뒤 반환했다.
96. 문자열 밀기
class Solution {
public int solution(String A, String B) {
int answer = -1;
if(A.equals(B)) return 0;
String push = A;
for(int i=0; i<A.length(); i++){
String a = push.substring(push.length() - 1);
push = a + push.substring(0, push.length() - 1);
if(push.equals(B)){
answer = i + 1;
break;
}
}
return answer;
}
}
<작성한 코드>
answer를 -1로 초기화하고 시작했다. 그 후 A와 B가 같으면 0을 리턴하도록 하였다. push에 A값을 집어넣고 for문에서 a에는 push의 마지막값을 저장. push에는 마지막값 + 나머지값을 넣어줘서 한 칸씩 이동시켰다. 그 뒤 push와 B가 같으면 answer에 i+1을 넣어주고 for문을 종료했다.
97. 종이 자르기
class Solution {
public int solution(int M, int N) {
int answer = 0;
int m = M-1;
int n = M * (N-1);
answer = n+m;
return answer;
}
}
<작성한 코드>
M을 가로 N을 세로의 길이라고 생각하고 풀이를 하였다. M에서 -1을 해주면 세로로 잘라야하는 가위질의 횟수, n에서 -1을 해주면 가로로 잘라야 하는 횟수가 나온다. M을 곱해준 이유는 세로로 잘린 종이만큼 가로로 잘라줘야 하기 때문에 곱해줬다. 이 횟수를 더해서 반환했다. 머리 아플 뻔했던 문제였다.
98. 연속된 수의 합
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int startNum = total / num - (num / 2);
if(num%2 == 0){
startNum++;
}
for(int i=0; i<num; i++){
answer[i] = startNum + i;
}
return answer;
}
}
<작성한 코드>
answer은 num의 개수만큼 선언해줬다. 그 뒤 startNum을 지정하여 초기화해 줬다. 연결된 값의 평균을 구하기 위해 total / num을 해줬고 거기서 중간값을 빼줬다. 만약 num이 짝수이면 중간값이 없기 때문에 +1을 해줬다. 그 뒤 for문으로 answer [i]에 중간값부터 차례대로 넣어주고 반환하였다.
99. 다음에 올 숫자
class Solution {
public int solution(int[] common) {
int answer = 0;
if(common[1] - common[0] == common[2] - common[1]){
answer = common[common.length-1] + (common[1] - common[0]);
} else {
answer = common[common.length-1] * (common[1] / common[0]);
}
return answer;
}
}
<작성한 코드>
등차인지 등비인지는 각 값의 차가 일정한지 커지는지 체크하면 됐다. 그래서 첫 번째 if에서 원소들의 차가 같으면 등차수열이므로 answer에는 마지막 값 + 원소의 차이를 더해줬다. 만약 등비수열이라면 마지막 값 * (원소끼리의 배율)을 해줬다. 처음에는 마지막값 * (원소의 차이)로 했는데 실패했다. 1 2 4를 예로 들어봤더니 실패했다. 그래서 / 로 배율을 구해서 곱해줬다.
100. 옹알이(1)
class Solution {
public int solution(String[] babbling) {
int answer = 0;
for(int i=0; i<babbling.length; i++){
String check = babbling[i];
if(check.matches("^(aya|ye|woo|ma)+$")){
answer ++;
}
}
return answer;
}
}
<작성한 코드>
어떻게 할까 고민을 했다. 해결에 도움이 될만한 함수를 찾아보다가 spring에서 사용했던 정규식이 있었다. 우선 for문으로 babbling의 길이만큼 반복시켜 줬다. 그 뒤 check에 문자열을 하나씩 넣어주고, matches()을 사용해서 정규식과 한번 이상 일치하는지 확인했다. 이 문제는 얼떨결에 해결됐다. 체크해 두고 다시 한번 풀어봐야 될 문제 같다. 의문이다.
'프로그래머스 문제풀이 > 알고리즘 (JAVA)' 카테고리의 다른 글
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (108~115번 문제풀이) (1) | 2023.10.09 |
---|---|
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (101~107번 문제풀이) (1) | 2023.10.05 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (89~94번 문제풀이) (1) | 2023.10.04 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (82~88번 문제풀이) (0) | 2023.09.30 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (75~81번 문제풀이) (0) | 2023.09.29 |
남건욱's 공부기록