-
프로그래머스 - 문자열 나누기알고리즘 2023. 2. 5.반응형
내 풀이
단순히 문제에서 요구하는 내용을 그대로 읽어 내려가듯이 풀었다.
포인트는 첫 글자 세팅을 반복문 밖에서 하느냐 안에서 하느냐에 따른 방법의 차이 하나와
남은 글자 처리 방안이다. 나는 i 와 s의 길이 사이에서 범위를 벗어나게 되면 에러가 떨어지니까 에러가 떨어지지 않게끔 반복문을 제때 탈출하는게 중요하다.
그 방법으로 i가 문자열 s의 총 길이 보다 1글자수 적을때 answer을 증가 시키고 탈출 하는 것 이다.
문제에서 요구하는건 어차피 단어로 자르는 것이니까 문자열 s를 끝까지 돌릴 필요는 없는 것이다.
public int solution(String s) { int answer = 0; int x_cnt = 0; int other_cnt = 0; char x = '0'; for(int i=0; i<s.length(); i++) { // 남은 글자 처리 (최대 글자수 전인 상태면 마지막 분리할 글자이니까) if(i == s.length() - 1) { answer++; break; } // 첫 글자 x 세팅 if(x_cnt == 0) { x = s.charAt(i); x_cnt++; } else { // x가 아닌 글자 세팅 char x2 = s.charAt(i); // 두 글자 비교 if(x == x2) { x_cnt++; } else { other_cnt++; } } // 카운팅 비교 if(x_cnt == other_cnt) { answer++; x_cnt = 0; other_cnt = 0; } } return answer; }
다른 사람 풀이
여기서는 x와 x가 아닌 글자가 같을때 같지 않을때의 카운팅 방법을 각각 변수로 계산한게 아니라
count라는 변수 하나로 한꺼번에 한 모양
같을때는 증가시키고 다를땐 감소 시켜서 결국에 다시 0이 되었다는건 x와 x가 아닌 글자가 나온 수 가 같다는 것
public int solution2(String s) { int answer = 0; int count = 0; char x = '0'; for(int i=0; i<s.length(); i++) { if(i == s.length() - 1) { answer++; break; } if(count == 0) { x = s.charAt(i); count++; } else { char x2 = s.charAt(i); if(x == x2) { count++; } else { count--; } } if(count == 0) { answer++; } } return answer; }
다른 사람 풀이 (최다 좋아요)
class Solution { public int solution(String s) { char prev = '1'; int same = 0, different = 0, answer = 0; for (char c : s.toCharArray()) { if (prev == '1') { prev = c; same++; answer++; } else if (prev == c) { same++; } else { different++; } if (same == different) { prev = '1'; same = 0; different = 0; } } return answer; } }
반응형'알고리즘' 카테고리의 다른 글
프로그래머스 - 달리기 경주 (0) 2023.09.18 프로그래머스 - 둘만의 암호 (0) 2023.02.26 프로그래머스 - 크기가 작은 부분문자열 (0) 2023.01.24 프로그래머스 - 콜라 문제 (0) 2022.11.04 프로그래머스 - 삼총사 (0) 2022.10.15