127. 문자열 묶기
import java.util.*;
class Solution {
public int solution(String[] strArr) {
int answer = 0;
Map<Integer, Integer> result = new HashMap<>();
for(int i=0; i<strArr.length; i++){
int length = strArr[i].length();
if(result.containsKey(length)){
result.put(length, result.get(length)+1);
} else {
result.put(length, 1);
}
}
answer = Collections.max(result.values());
return answer;
}
}
<작성한 코드>
Map형태의 배열을 하나 만들어줬다. 그 뒤 for문으로 strArr길이만큼 반복해 줬고 각 요소의 길이를 key값으로 지정했다. 만약 result안에 key값으로 길이가 이미 들어어 있다면 그 값에 +1을 해줬고 들어있지 않다면 그 길이의 키에 값을 1로 지정해 줬다. 그 뒤 answer에 Collections.max를 사용해서 hashmap의 값 중 가잔 큰 것을 가져와 반환했다.
128. 배열 비교하기
class Solution {
public int solution(int[] arr1, int[] arr2) {
int answer = 0;
int sum1 = 0;
int sum2 = 0;
if(arr1.length < arr2.length) return -1;
else if(arr1.length > arr2.length) return 1;
for(int a : arr1){
sum1 += a;
}
for(int a : arr2){
sum2 += a;
}
if(sum1 == sum2) return 0;
answer = (sum1 > sum2) ? 1 : -1;
return answer;
}
}
<작성한 코드>
if, else를 사용해서 우선적으로 길이를 비교하여 -1 / 1을 반환하도록 했다. 만약 길이가 같다면 for문으로 arr1의 원소의합, arr2의원소의 합을 구해줬다. 구한 합을 비교해서 같으면 0을 리턴하고 아니라면 삼항연산자로 sum > sum2가 참이면 1, 거짓이면 -1을 반환하도록 했다.
129. 배열의 길이를 2의 거듭제곱으로 만들기
class Solution {
public int[] solution(int[] arr) {
int size = 1;
int length = arr.length;
if((length & length-1) == 0) return arr;
while(length > size){
size *= 2;
}
int[] answer = new int[size];
for(int i=0; i<length; i++){
answer[i] = arr[i];
}
return answer;
}
}
<작성한 코드>
length & length-1 을해서 AND연산으로 0이 나오면 2의 거듭제곱이므로 arr를 그대로 반환하였다. 만약 아니라면 while문으로 1부터 2배씩 늘려가서 length길이보다 커질 때까지 반복한다. while문이 종료되고 size가 초기화되면 그 길이만큼 answer의 배열길이를 선언해 주고 answer [i] 안에 arr [i]를 넣어줬다. int형 배열은 초기화해주지 않은 값은 0으로 설정되기 때문에 그대로 반환해 줬다.
130. 무작위로 K개의 수 뽑기
import java.util.*;
class Solution {
public int[] solution(int[] arr, int k) {
int[] answer = new int[k];
List<Integer> result = new ArrayList<>();
for(int a : arr){
if(result.contains(a)){
continue;
}
result.add(a);
}
while(result.size() < k){
result.add(-1);
}
for(int i=0; i<k; i++){
answer[i] = result.get(i);
}
return answer;
}
}
<작성한 코드>
List형 배열 result를 선언해 줬다. 그 뒤 forEach문으로 arr안에 있는 모든 원소만큼 넣어줬고 if로 result안에 현재 원소 a값과 일치하는 게 있는지 찾는다. 있다면 continue를 만나서 그다음 원소가 대입될것이고 없다면 result에 a값이 추가된다. 그 다음 while문에서는 result의 길이가 k보다 작다면 작지 않을 때까지 result에 -1을 대입해 준다. 그리고 이 result의 값을 그대로 answer배열에 넣어주고 반환하였다.
131. 배열 만들기 6
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
List<Integer> stk = new ArrayList<>();
int i=0;
while(i < arr.length){
if(stk.isEmpty()){
stk.add(arr[i]);
i++;
} else if(stk.get(stk.size()-1) == arr[i]){
stk.remove(stk.size()-1);
i++;
} else{
stk.add(arr[i]);
i++;
}
}
int[] answer;
if(stk.size() == 0){
answer = new int[1];
answer[0] = -1;
return answer;
}
answer = new int[stk.size()];
for(int j=0; j<stk.size(); j++){
answer[j] = stk.get(j);
}
return answer;
}
}
<작성한 코드>
List형 배열인 변수 stk를 선언했다. 문제에서 요구하는 대로 i의 초기값은 0으로 잡아줬고, i가 arr의 길이보다 작을 때 반복시켰다. isEmpty()를 사용해서 리스트가 비어있으면 arr [i]를 추가해주고 i를 1 더해줬다. 다음 if문은 stk의 마지막 원소가 arr[i]와 같을때 마지막 원소를 지우고 i를 더해줬다. else문에서는 stk에 arr[i]를 더해주고 i도 1을 더해줬다.
그 뒤 answer 배열을 선언해 주고 stk의 사이즈가 0이면 길이를 1로 초기화하고 -1을 담은 뒤 반환시켰다. 사이즈가 0이 아니라면 stk 원소의 값을 그대로 answer에 대입해 주고 반환하였다.
132. 빈 배열에 추가, 삭제하기
import java.util.*;
class Solution {
public int[] solution(int[] arr, boolean[] flag) {
List<Integer> result = new ArrayList<>();
for(int i=0; i<flag.length; i++){
if(flag[i]){
for(int j=0; j<arr[i]*2; j++){
result.add(arr[i]);
}
}else{
for(int j=0; j<arr[i]; j++){
result.remove(result.size()-1);
}
}
}
int[] answer = new int[result.size()];
for(int i=0; i<result.size(); i++){
answer[i] = result.get(i);
}
return answer;
}
}
<작성한 코드>
List형 배열 result를 선언했다. 그리고 문제에 나온 대로 flag가 참이면 arr [i]의 값만큼 result에 추가해 줬고, 거짓이라면 그 값의 횟수만큼 resutl에서 삭제시켜 줬다. 그 뒤 anwer에 길이를 선언해 주고 result의 값을 그대로 answer에 대입해 주고 반환하였다.
133. 배열의 원소만큼 추가하기
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
List<Integer> result = new ArrayList<>();
for(int i=0; i<arr.length; i++){
for(int j=0; j<arr[i]; j++){
result.add(arr[i]);
}
}
int[] answer = new int[result.size()];
for(int i=0; i<result.size(); i++){
answer[i] = result.get(i);
}
return answer;
}
}
<작성한 코드>
List 형식의 배열 result를 선언하고 arr의 길이만큼 for문을 돌렸다. 내부에서는 중첩 for문으로 j는 0부터 arr [i]의 숫자까지 반복하도록 하였고 result에 arr [i] 값을 그 숫자만큼 더해줬다. 그 뒤 answer에 result값을 대입하고 반환했다.
'프로그래머스 문제풀이 > 알고리즘 (JAVA)' 카테고리의 다른 글
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (140~149번 문제풀이) (0) | 2023.10.16 |
---|---|
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (134~139번 문제풀이) (1) | 2023.10.16 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (123~126번 문제풀이) (0) | 2023.10.10 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (116~122번 문제풀이) (1) | 2023.10.09 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (108~115번 문제풀이) (1) | 2023.10.09 |
남건욱's 공부기록