상세 컨텐츠

본문 제목

[프로그래머스] Lv.0 - 인덱스 바꾸기

알고리즘/프로그래머스

by 으노로 2023. 3. 9. 00:29

본문

안녕하세요.

오늘은 프로그래머스의 코딩테스트 lv.0 단계 중에 인덱스 바꾸기를 공부해보겠습니다.

언어는 Java로 구현하였습니다.

 

문제 설명

문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

 

제한 사항

  • 1 < my_string의 길이 < 100
  • 0 ≤ num1, num2 < my_string의 길이
  • my_string은 소문자로 이루어져 있습니다.
  • num1 ≠ num2

입출력 예

my_string num1 num2 result
"hello" 1 2 "hlelo"
"I love you" 3 6 "I l veoyou"

문제 풀이

문자열 my_string의 인덱스 num1과 인덱스 num2의 순서를 변경하기 위해 Char형 배열로 변환한 뒤에 각각의 인덱스를 서로 변경하고 다시 String으로 변환하였습니다.

  1. 문자열 my_string을 Char[]로 변환한다.
  2. Char[num1]은 my_string.charAt(num2)로, Char[num2]은 my_string.charAt(num1)로 변경한다.
  3. Char[]를 다시 String으로 변환한다.
1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
    public String solution(String my_string, int num1, int num2) {
        char[] arr = my_string.toCharArray();
        
        arr[num1] = my_string.charAt(num2);
        arr[num2] = my_string.charAt(num1);
        
        String answer = String.valueOf(arr);
        
        return answer;
    }
}

 

추가 풀이

다른 분들의 풀이 중에 자바의 swap 함수를 이용해 구현한 방법이 있어서 공부해보려고 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.*;
 
class Solution {
    public String solution(String my_string, int num1, int num2) {
        List<String> list = new ArrayList<>(List.of(my_string.split("")));
 
        Collections.swap(list, num1, num2);
        
        String answer = String.join("", list);
        
        return answer;
    }
}

my_string을 List로 변환한 뒤에 swap 함수로 변경하고 다시 join 함수로 변환하였습니다.


사용 함수

  • Collections.swap()
    • 배열의 두 값을 교환하는 함수
  • String.join()
    • 배열을 String으로 변환하는 함수
    • 구분자를 추가하여 String으로 변환할 수 있다.

마무리 정리

두 가지 방식 결국은 모두 동일한 방식으로 동작하지만 자바의 내장 함수로 구현이 가능했습니다.

이상으로 프로그래머스 lv.0 - 인덱스 바꾸기 공부를 마치겠습니다.

감사합니다.

관련글 더보기

댓글 영역