Solution 1) 내 풀이
import java.util.*;

class Solution {
    public int solution(String before, String after) {
        char[] arr1 = before.toCharArray();
        char[] arr2 = after.toCharArray();
        
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        
        String str1 = new String(arr1);
        String str2 = new String(arr2);
        
        return str1.equals(str2) ? 1 : 0;
    }
}

 

Solution 2) 다른 사람의 풀이
import java.util.Arrays;
class Solution {
    public int solution(String before, String after) {
        char[] a = before.toCharArray();
        char[] b = after.toCharArray();
        Arrays.sort(a);
        Arrays.sort(b);

        return new String(a).equals(new String(b)) ? 1 :0;
    }
}

 

 코드 및 문제 리뷰
문자열 A와 B를 비교하여 B의 순서를 바꿔 A를 만들수 있다면 1 아니라면 0으로 반환하는 문제이다.

다른 사람의 풀이를 보니 캐릭터 배열의 특성을 이용해 바로 문자열로 만들어 비교하는 모습이 인상적이라 참고했다. 형변환은 정말 많이 사용해봐야 능숙하게 사용할 수 있을 것 같다.

 

 

Solution 1) 내 풀이
class Solution {
    public int solution(String[] babbling) {
        int answer = 0;

        for(int i = 0; i < babbling.length; i++) {
            babbling[i] = babbling[i].replace("aya", "0");
            babbling[i] = babbling[i].replace("woo", "0");
            babbling[i] = babbling[i].replace("ye", "0");
            babbling[i] = babbling[i].replace("ma", "0");
            babbling[i] = babbling[i].replace("0", "");

            if(babbling[i].equals("")) answer++;
        }
        return answer;
    }
}

 

코드 및 문제 리뷰
조카는 "aya" ,"ye", "woo", "ma" 네가지 발음밖에 하지 못한다. 문자열이 배열이 주어졌을 때 조카가 발음할수 있는 요소는 몇가지였는지 반환하는 문제이다.

조카가 발음할수 있는 발음을 replace로 0으로 만든 뒤 마지막에 모두 0을 모두 제거한다.
그 이후 문자열이 비어있는지 확인해 비어있다면 answer을 올려주면 조카가 발음 가능한 요소의 개수가 나온다.

처음에 replace로 바로 공백문자로 변환했었다. 그렇게 됐을 때 공백으로 비어진 다음 조카가 발음 가능한 요소가 다시 나오면 그 역시 사라지며 공백 문자가 되는 문제가 있었다. 하지만 바로 공백 문자가 아닌 다른 문자(현재는 0)을 대입 시킨 후 마지막에 0을 제거해주는 방식으로 변경하여 처리할 수 있었다. 

 

 

Solution 1) 내 풀이

class Solution {
    public int[] solution(int[][] score) {
        double[] avg = new double[score.length];
        int[] answer = new int[score.length];

        for(int i = 0; i < score.length; i++) {
            avg[i] = (double)(score[i][0] + score[i][1]) / 2;
        }

        for(int i = 0; i < avg.length; i++) {
            int rank = 1;
            for(int j = 0; j < avg.length; j++) {
                if(avg[i] < avg[j]) {
                    rank++;
                }
            }
            answer[i] = rank;
        }
        return answer;
    }
}

 

코드 및 문제 리뷰
학생들의 영어, 수학 점수가 2차원 배열에 들어있다. 두 과목의 평균으로 학생들의 등수를 배열로 반환하는 문제이다.

문제 자체는 어렵지 않았으나 등수매김이 조금 애매했다. 반복문을 돌며 높은 점수보다 더 낮은 점수에 rank를 + 시켜 최종적으로 해당 rank를 반환해주면 되는데, 이 방식이 잘 떠오르지 않는다.

많은 문제에서 쓰일만한 방식이기에 잘 기억해둬야겠다.

 

 

 

Solution 1) 다른 사람의 풀이
import java.util.*;
class Solution {
    public int[] solution(int[] numlist, int n) {

        int size = numlist.length;
        for(int i=0; i<size-1; i++){
            for(int k=i+1; k<size; k++){
                int a = (numlist[i] - n) * (numlist[i] > n ? 1 : -1);
                int b = (numlist[k] - n) * (numlist[k] > n ? 1 : -1);
                if(a > b || (a == b && numlist[i] < numlist[k])){
                    int temp = numlist[i];
                    numlist[i] = numlist[k];
                    numlist[k] = temp;
                }

            }
        }
        return numlist;
    }
}

 

코드 및 문제 리뷰
int 배열과 int n이 주어진다. 배열을 n을 기준을 재배열 할건데. 조건은 n을 가장 앞으로 보낸뒤 n과 절대값 기준 가까운수로 '오름차순' 정렬을 해야한다. 배열이 1, 2, 3, 4, 5, 6이고 n이 4 라면 순서는 4 5 3 6 2 1 이 된다.

다른 사람의 풀이를 가져 왔다. 이중 반복문을 돌며 index i와 i +1를 비교 한다. 

이때 비교 방법은 (idx 요소 - n) * (idx 요소 > n ? 1 : -1)이 된다. 요소 1과 2로 비교 해보자.
a = (1 - 4) * (1 > 4 ? 1 : -1)  >> 3
b = (2 - 4) * (2 > 4 ? 1 : -1)  >> 2
이후 조건문은
if(a > b || (a == b && numlist[i] < numlist[k])){ // a가 b보다 크거나 a가 b와 같고 1이 2 보다 작은 경우

int temp = numlist[i];             // tmp에 1
numlist[i] = numlist[k];          // 1에 2
numlist[k] = temp;                // 2에 tmp
즉, 두개의 위치를 바꾼다. 그러면 배열은 2, 1, 3, 4, 5, 6일 것이다. 이후 배열을 같은 방식으로 돌며 정답 배열인
4, 5, 3, 6, 2, 1를 만들게 된다.

(솔직히 이런 로직은 아직까지 내 머리론 전혀 생각해낼 수 없다.)

 

Solution 1) 다른 사람의 풀이

class Solution {
    int[][] dots;

    public int solution(int[][] dots) {
        this.dots = dots;
        if (parallel(0, 1, 2, 3)) return 1;
        if (parallel(0, 2, 1, 3)) return 1;
        if (parallel(0, 3, 1, 2)) return 1;
        return 0;
    }

    boolean parallel(int a, int b, int c, int d) {
        int x = (dots[a][0] - dots[b][0]) * (dots[c][1] - dots[d][1]);
        int y = (dots[a][1] - dots[b][1]) * (dots[c][0] - dots[d][0]);
        return x == y || x == -y;
    }
}

 

Solution 1) 다른 사람의 풀이

import java.util.HashMap;
import java.util.Map;
class Solution {
    public int solution(int[][] lines) {
        Map<Integer, Integer> map = new HashMap<>();

        for (int i=0; i<lines.length; i++) {
            int min = Math.min(lines[i][0], lines[i][1]);
            int max = Math.max(lines[i][0], lines[i][1]);

            for (int j=min; j<max; j++) {
                map.put(j, map.getOrDefault(j, 0) + 1);
            }
        }

        int answer = 0;

        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (entry.getValue() >= 2) {
                answer++;
            }
        }

        return answer;
    }
}

 

코드 및 문제 리뷰
다시 확인 후 작성해야함

+ Recent posts