본문 바로가기
TIL/Java 알고리즘 문제 풀이

23.06.16

by J1-H00N 2023. 6. 16.

문자열에서 중복된 문자열 제거하기

    public String solution(String my_string) {
        ArrayList<String> answer = new ArrayList<>();
        for (int i = 0; i < my_string.length(); i++) {
            String addString = Character.toString(my_string.charAt(i));
            if (!answer.contains(addString)) {
                answer.add(addString);
            }
        }
        return String.join("",answer);
    }

ArrayList를 만든 뒤 조건문을 통해 중복되지 않는 글자만 추가하도록 로직을 짜고 join메서드를 통해 리스트의 글자들을 String으로 변환해줬다.

다른 풀이를 보니 ArrayList가 아닌 LinkedHashSet을 사용해 중복을 허용하지않고 순서대로 들어가는 점을 이용한 풀이가 있었는데, 그게 훨씬 영리하고 깔끔하며 시간복잡도도 낮아 보여 좋다고 생각한다. 해당 답안은 아래 첨부

또한 굳이 ArrayList로 만들지 않고도 String.value를 통해 비교가 가능하다.

더보기
import java.util.*;
class Solution {
    public String solution(String my_string) {
        String[] answer = my_string.split("");
        Set<String> set = new LinkedHashSet<String>(Arrays.asList(answer));

        return String.join("", set);
    }
}

 

문자열에서 대문자는 소문자로, 소문자는 대문자로 변환하기

    public String solution(String my_string) {
        String answer = "";

        String upperCase = my_string.toUpperCase();
        for (int i = 0; i < my_string.length(); i++) {
            String upper = upperCase.valueOf(upperCase.charAt(i));
            String my = my_string.valueOf(my_string.charAt(i));
            if (upper.equals(my)) {
                answer += my.toLowerCase();
            } else {
                answer += upper;
            }
        }
        return answer;
    }

잘 풀었다 생각했으나 Character에 isUpperCase나 isLowerCase같은 대문자인지 소문자인지 판별하는 메서드가 이미 있다는 것을 알게 되고 좀 허무했다...

 

문자열 글자 위치 바꾸기

    public String solution(String my_string, int num1, int num2) {
        String answer = "";

        int big = 0;
        int small = 0;
        if (num1 > num2) {
            big = num1;
            small = num2;
        } else {
            big = num2;
            small = num1;
        }

        for (int i = 0; i < small; i++) {
            answer += my_string.charAt(i);
        }
        answer += my_string.charAt(big);
        for (int i = small + 1; i < big; i++) {
            answer += my_string.charAt(i);
        }
        answer += my_string.charAt(small);
        for (int i = big + 1; i < my_string.length(); i++) {
            answer += my_string.charAt(i);
        }
        return answer;
    }

솔직히 누가봐도 좋은 로직은 아니지만 당장 생각나는 대로 만들어본 코드다.

다른 풀이를 봐보니 char[]로 만들고 각 위치에 글자를 다른 위치의 글자로 저장하고 다시 문자열로 만드는 방법이 있던데 그게 제일 깔끔하고 좋아보인다. 해당 코드는 아래 첨부

더보기
class Solution {
    public String solution(String my_string, int num1, int num2) {
        String answer = "";

        char[] ch = my_string.toCharArray();

        ch[num1] = my_string.charAt(num2);
        ch[num2] = my_string.charAt(num1);

        answer = String.valueOf(ch);
        return answer;
    }
}

 

'TIL > Java 알고리즘 문제 풀이' 카테고리의 다른 글

23.06.23  (0) 2023.06.23
23.06.18  (2) 2023.06.18
23.06.11  (0) 2023.06.11
23.06.07  (0) 2023.06.07
23.06.05  (0) 2023.06.05