-
[프로그래머스] 문자열 나누기 자바코딩테스트 2025. 3. 31. 12:07반응형
https://school.programmers.co.kr/learn/courses/30/lessons/140108
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
문자열의 가장 앞 문자를 기준으로 오른쪽으로 읽어나가는 과정에서, 그 문자와 같은 문자의 갯수와 같지 않은 문자의 갯수를 센다. 같은 문자 갯수 == 아닌 문자 갯수 일 때, 해당 위치를 기준으로 오른쪽으로 문자열을 자른다.
자른 오른쪽의 문자열로 해당 행위를 반복하여 문자열 끝에 도달했을 때, 생성된 총 문자열의 갯수를 구하라.
접근
같은 문자열 갯수를 저장할 변수와 아닌 갯수를 저장할 변수를 선언하고, 맨 앞 문자를 기준문자로 삼는다.
그 다음, 문자열 길이만큼 오른쪽으로 한 칸씩 읽어서 같을 경우 같은 문자 갯수 +1, 아닐 경우 아닌 문자 갯수 +1 하고,
같은 문자 갯수 == 다른 문자 갯수일 때, s.substring(i +1) 하여 반환하는 별도의 메서드 divString을 하나 만든다.
원래 작업에서 반복작업을 수행하는데, 쪼개기 전 길이를 저장하고 s = divString(s) 작업을 하는 재귀 작업을 하여
그때마다 cnt를 하나씩 추가한다.
beforeLen == s.length() 일 때 반복작업을 종료하여 최종적으로 생성된 작업횟수(생성된 문자열의 갯수)를 반환한다.
public static int solution(String s) { int cnt = 1; while(true){ int beforeLen = s.length(); s = divString(s); if(beforeLen == s.length()){ break; } cnt ++; } return cnt; } public static String divString(String s){ String newString = s; int sameC = 0; int diffC = 0; char first = s.charAt(0); for(int i = 0; i < s.length(); i++){ if(first == s.charAt(i)){ sameC ++; } else { diffC ++; } if(sameC == diffC){ newString = s.substring(i +1); break; } } return newString; }
문제발생
새로 생성한 문자열이 ""가 되는 경우의 처리가 되어있지 않아 예외가 발생함.
-> divString("")일 경우의 처리와 본문에서 s=""가 되는 경우의 예외처리를 추가하였다.수정 후 코드
public static int solution(String s) { int cnt = 1; //원래 문자열도 포함해야하므로 1을 먼저 센다. while(true){ int beforeLen = s.length(); s = divString(s); if(beforeLen == s.length() || s.isEmpty()){ break; } cnt ++; } return cnt; } public static String divString(String s){ String newString = s; int sameC = 0; int diffC = 0; if(!s.isEmpty()){ char first = s.charAt(0); for(int i = 0; i < s.length(); i++){ if(first == s.charAt(i)){ sameC ++; } else { diffC ++; } if(sameC == diffC){ newString = s.substring(i +1); break; } } } return newString; }
알게된 점
예외상황이 발생할 것을 대비해야 보다 안전하고 완전하게 로직을 수행할 수 있을 것이다.
기본 로직에 예외상황에 대해 한번 더 생각하는 것이 좋겠다고 느꼈다.
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 기사단의 무기 자바. 모든 숫자의 약수의 개수 구하기 (0) 2025.04.01 [프로그래머스] 명예의 전당 (1) 자바, 최소값, 정렬 (0) 2025.03.31 [프로그래머스] 가장 가까운 같은 글자 자바 (0) 2025.03.31 [프로그래머스] 크기가 작은 부분 문자열 자바 (0) 2025.03.31 [프로그래머스] 개인정보 수집 유효기간 자바 (0) 2025.03.30