728x90
반응형
https://school.programmers.co.kr/learn/courses/15008/lessons/121683?language=java
◎ 문제 설명
알파벳 소문자로만 이루어진 어떤 문자열에서, 2회 이상 나타난 알파벳이 2개 이상의 부분으로 나뉘어 있으면
외톨이 알파벳이라고 정의합니다.
문자열 "edeaaabbccd"를 예시로 들어보면,
→ a는 2회 이상 나타나지만, 하나의 덩어리로 뭉쳐있으므로 외톨이 알파벳이 아닙니다."ede(aaa)bbccd"
b, c도 a와 같은 이유로 외톨이 알파벳이 아닙니다.
d는 2회 나타나면서, 2개의 부분으로 나뉘어 있으므로 외톨이 알파벳입니다. "e(d)eaaabbcc(d)"
e도 d와 같은 이유로 외톨이 알파벳입니다.
문자열 "eeddee"를 예시로 들어보면,
→ e는 4회 나타나면서, 2개의 부분으로 나뉘어 있으므로 외톨이 알파벳입니다. "(ee)dd(ee)"
d는 2회 나타나지만, 하나의 덩어리로 뭉쳐있으므로 외톨이 알파벳이 아닙니다."ee(dd)ee"
문자열 input_string이 주어졌을 때, 외톨이 알파벳들을 알파벳순으로 이어 붙인 문자열을 return 하도록 solution 함수를 완성해주세요. 만약, 외톨이 알파벳이 없다면 문자열 "N"을 return 합니다.
◎ 입출력 예시
NO | input_string | result |
1 | edeaaabbccd | de |
2 | eeddee | e |
3 | string | N |
4 | zbzbz | bz |
◎ 문제 풀이
import java.util.*; class Solution { public String solution(String input_string) { // return 받을 문자 변수 지정 String answer = ""; // 문자열을 char 형으로 변경 후 배열로 지정 char arr[] = input_string.toCharArray(); // 알파벳의 실행 여부 파악을 위한 boolean 배열 지정 boolean alpha[] = new boolean[26]; // 외톨이 문자를 저장하기 위한 리스트 지정 List<String> list = new ArrayList<>(); for(int i=0; i<arr.length-1; i++){ // 알파벳이 다음에 나오는지 판단 하기 위한 변수 지정 boolean tf = false; // 알파벳이 이미 나왔으면 다시 for문으로 돌아감 if(alpha[arr[i] - 97]) continue; // 나온 알파벳 위치는 true로 변경 alpha[arr[i] - 97] = true; if(arr[i] == arr[i+1]) tf= true; for(int j=i+1; j<arr.length; j++){ // 두 값이 같으면 내부의 함수 실행 if(arr[i] == arr[j]){ if(tf){ // 연속된 문자면 for문으로 continue; } else{ // 연속된 문자가 아니면 list에 저장 list.add(arr[i]+""); break; } } else{ // 두 값이 같지 않으면 false로 변경 tf= false; continue; } } } // 오름차순으로 정렬 Collections.sort(list); for(String a : list){ answer += a; } // answer에 값이 저장 안되었으면 N 반환 if(answer.length() == 0){ answer += 'N'; } return answer; } }
이번에는 PCCP의 1번 문제를 풀이 해보았습니다!!
PCCP 준비를 해보기 위해 문제를 풀어보았는데 생각보다 쉽지 않네요,,,
다른 문제들은 방법은 알겠는데 어떻게 코딩을 해야할지 감이 잡히지가 않아요,,ㅋㅋㅋ
그래도 한 번 풀어볼때까지 해보겠습니다!!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
728x90
반응형