Post

[Programmers] #120895 - 인덱스 바꾸기 [Java][C++][Python]

문자열에서 주어진 두 인덱스의 문자를 서로 맞바꾼 결과를 반환하는 문제.

[Programmers] #120895 - 인덱스 바꾸기 [Java][C++][Python]

문제 링크


1. 아이디어

my_string에서 인덱스 num1num2에 있는 문자를 서로 맞바꾼 문자열을 반환하면 되는 문제다. 두 인덱스가 모두 문자열 범위 안이고 서로 다름이 보장되므로, 별도 검사 없이 두 자리의 문자를 교환하면 된다.


2. 복잡도

접근시간공간
풀이$O(N)$$O(N)$

($N$ = my_string의 길이)


3. 코드

풀이 [Java][C++][Python]

1
2
3
4
5
6
7
8
9
10
class Solution {
    public String solution(String my_string, int num1, int num2) {
        char[] arr = my_string.toCharArray();
        char tmp = arr[num1];
        arr[num1] = arr[num2];
        arr[num2] = tmp;

        return new String(arr);
    }
}

String은 불변이라 문자를 직접 바꿀 수 없다. toCharArray로 가변 char[]를 얻어 두 자리를 교환한 뒤 new String으로 문자열을 다시 만든다.

1
2
3
4
5
6
7
#include <bits/stdc++.h>
using namespace std;

string solution(string my_string, int num1, int num2) {
    swap(my_string[num1], my_string[num2]);
    return my_string;
}

std::string은 가변이므로, 두 문자를 swap으로 제자리에서 맞바꿔 그대로 반환했다.

1
2
3
4
def solution(my_string, num1, num2):
    lst = list(my_string)
    lst[num1], lst[num2] = lst[num2], lst[num1]
    return "".join(lst)

문자열은 불변이라 인덱스 대입이 안 된다. list로 바꿔 두 원소를 튜플 대입으로 교환한 뒤 "".join으로 다시 문자열로 합쳤다.


This post is licensed under CC BY 4.0 by the author.