인프런 자바 알고리즘 문제풀이 입문 - 1. String(문자열) 2

dev-mage·2022년 10월 22일
0
post-thumbnail
post-custom-banner

1-4. 단어 뒤집기

문자열 뒤집기

char로 쪼갠 후 뒤집기

  1. 역순 접근

    1. StringtoCharArray()을 통해 char[]로 변환
    2. 문자를 거꾸로 저장하기 위한 char[] 생성
    3. 문자열의 역순으로 접근해 새로운 char[]에 차례대로 저장
    4. char[]String으로 변환
    public static ArrayList<String> solution(String[] words) {
        ArrayList<String> answer = new ArrayList<>();
        for (String word : words) {
            char[] letters = word.toCharArray();
            char[] reversedLetters = new char[letters.length];
            int wordCount = 0;
            for (int j = letters.length - 1; j >= 0; j--) {
                reversedLetters[wordCount] = letters[j];
                wordCount++;
            }
            answer.add(String.valueOf(reversedLetters));
        }
        return answer;
    }
  2. 왼쪽 글자와 오른쪽 글자 서로 교환

    1. 단어의 첫글자(왼쪽)와 마지막 글자(오른쪽)을 서로 치환
    2. 왼쪽 글자의 인덱스가 오른쪽 글자의 인덱스보다 커지면 뒤집기 완료
    public static ArrayList<String> solution(String[] words) {
        ArrayList<String> answer = new ArrayList<>();
    
        for (String word : words) {
            char[] letters = word.toCharArray();
            int left = 0;
            int right = letters.length - 1;
            while(left < right) {
                char temp = letters[left]; // 왼쪽 글자 임시 저장
                letters[left] = letters[right]; // 왼쪽 글자를 오른쪽 글자로
                letters[right] = temp; // 오른쪽 글자를 왼쪽 글자로 치환
                left++;
                right--;
            }
            answer.add(String.valueOf(letters));
        }
    
        return answer;
    }

StringBuilder 사용

  1. String을 StringBuilder로 변환
  2. StringBuilder의 reverse()로 뒤집기
public static ArrayList<String> solution(String[] words) {
    ArrayList<String> answer = new ArrayList<>();
    for (String word : words) {
        answer.add(new StringBuilder(word).reverse().toString());
    }
    return answer;
}

1-5. 특정 문자 뒤집기

문자열에서 영어 문자만 뒤집기

문자 판별

  • 문자가 알파벳인지 판별 → Character.isAlphabetic() 사용
    public static String solution(String word) {
        char[] charArr = word.toCharArray();
        int begin = 0;
        int end = charArr.length - 1;
        while (begin < end) {
            char left = charArr[begin];
            char right = charArr[end];
            if (!Character.isAlphabetic(left)) begin++;
            else if (!Character.isAlphabetic(right)) end--;
            else {
                charArr[begin] = right;
                charArr[end] = left;
                begin++;
                end--;
            }
        }
        return String.valueOf(charArr);
    }

1-6. 중복 문자 제거

문자열에서 중복 문자 제거(순서 유지)

indexOf() 사용

  • indexOf()는 주어진 문자가 처음 등장하는 인덱스를 반환
  • 문자열에서 어떤 문자의 인덱스와 해당 문자의 indexOf() 값이 다르다면 중복된 문자
public static String solution(String word) {
    String answer = "";
    for (int i = 0; i < word.length(); i++) {
        if(word.indexOf(word.charAt(i)) == i) answer += word.charAt(i);
    }
    return answer;
}

LinkedHashSet 사용

  • Set은 중복을 불허하고 순서를 보장하지 않는 자료구조.
  • Java의 LinkedHashSet은 입력된 순서를 유지하는 Set으로 순서를 유지하면서 중복을 제거할 수 있음.
public static String solution(String word) {
    StringBuilder answer = new StringBuilder();

    LinkedHashSet<String> set = new LinkedHashSet<>(Arrays.asList(word.split("")));
    for (String s : set) {
        answer.append(s);
    }
    return answer.toString();
}

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 - 인프런 | 강의

post-custom-banner

0개의 댓글