-
728x90
문제 설명
문자열
my_string
이 매개변수로 주어집니다.my_string
에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.제한 사항
- 1 ≤
my_string
≤ 110 - my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
- 대문자와 소문자를 구분합니다.
- 공백(" ")도 하나의 문자로 구분합니다.
- 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.
답안
import java.util.*; class Solution { public String solution(String my_string) { String answer = ""; String[] arr = my_string.split(""); answer += arr[0]; for(int i=1; i<arr.length; i++) { if(answer.contains(arr[i])) { continue; }else { answer+= arr[i]; } } return answer; } }
my_string 문자열을
split()
을 통해 String 배열로 만든 뒤 answer에 첫번째 문자열을 넣어준다.그리고 for문을 돌면서 answer에
contains()
함수를 이용해서 문자열이 포함되어 있는지 아닌지를 판단하여 문자열을 넣어준다.이렇게 contains을 이용해서 문제를 풀어도 되지만
indexOf()
를 활용한 방법도 존재한다.class Solution { public String solution(String my_string) { String answer = ""; for(int i=0; i<my_string.length(); i++){ if(i==my_string.indexOf(my_string.charAt(i))) answer+=my_string.charAt(i); } return answer; } }
굳이
my_string
을 배열로 만들지 않고indexOf()
의 리턴값인 문자열이 포함되어 있다면 첫번째 문자열의 인덱스를 갖고온다는 것을 이용해서 풀 수 있다.charAt()을 이용해 전체 문자열에서 한글자씩 떼어내 indexOf()로 인덱스를 확인한다. 당연히 모든 문자는 my_string에 포함되어 있기 때문에 indexOf를 통해 인덱스가 반환되지만 중복된 문자열 또한 맨 처음 등장한 문자열의 인덱스가 반환되기 때문에 중복된 문자열이 오더라도 answer에 두번 더해질 수 없다.
중복이냐 아니냐를 판단하는 것이 아닌 무조건 첫번째 등장한 문자열만 저장하기 때문에 이 방식이 이번 자바 알고리즘 문제에서 원하는 답이 아닐까 싶다.
참고
문자열.split(구분자)
: 구분자를 이용해서 문자열을 끊어서 배열로 반환, 구분자가 공백인 경우 한글자씩 끊어서 배열로 반환.문자열.contains(A)
: 문자열에 A 문자가 있는지 체크하는 함수, 있다면 true 없다면 false 리턴문자열.indexOf(A)
: 문자열에 A 문자의 인덱스 위치 반환하는 함수, 없다면 -1를 리턴문자열.charAt(인덱스)
: 기준 문자열에서 인덱스 위치에 해당하는 문자열 한글자를 char 타입으로 반환
728x90'algorithm' 카테고리의 다른 글
자바 알고리즘 - A로 B 만들기 (0) 2023.09.06 자바 알고리즘 - k의 개수 (0) 2023.09.06 자바 알고리즘 - 삼각형의 완성조건(1) (0) 2023.09.05 자바 알고리즘 - 가까운 수 (0) 2023.09.05 자바 알고리즘 - 369게임 (0) 2023.09.04 - 1 ≤