https://school.programmers.co.kr/learn/courses/30/lessons/140108
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 첫 번쩨 문자인지에 대한 여부를 체크할 boolean 변수(isFirst) 하나를 선언한다.
2. 이 문자는 현재 순회하는 문자가 처음 또는 문자열 분할 후 나오는 단어의 첫 문자인 경우, true 값을 가진다.
3. isFirst == true에서 첫번째 문자를 변수에 담고, isFirst 값을 false로 바꿔준다. 이 때, 현재 첫 문자도 횟수에 들어가야 하므로 첫번째 문자와 동일한 문자가 나오는 횟수를 담은 변수 same_cnt의 값을 하나 더해준다.
4. 값은 문자와 다른 문자의 수가 같을 때까지 반복을 해주고 값이 같다면 answer 변수의 값을 하나 더해준다.
5. same_cnt 와 diff_cnt를 초기화한다.
6. 반복문을 다 마치고 same_cnt 또는 diff_cnt의 값이 0이 아니면 분할 후 처리가 안된 단어가 있으므로 answer에 1을 더 더한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | class Solution { public int solution(String s) { int answer = 0; boolean isFirst = true; // 첫번째 문자인지 체크 char first_ch = ' '; // 첫번째 문자 int same_cnt = 0; // 첫번째 문자와 같은 문자의 수 int diff_cnt = 0; // 첫번쨰 문자와 다른 문자의 수 for(int i=0; i<s.length(); i++) { if(isFirst) { // 첫번째 문자 차례인 경우 first_ch = s.charAt(i); // 현재 순회한 문자를 저장 isFirst = false; // 플래그를 false로 변경 same_cnt++; // 자기 자신도 계산을 해야하므로 same_cnt에 값을 하나 더해준다. } else { if(first_ch == s.charAt(i)) same_cnt++; else diff_cnt++; if(same_cnt == diff_cnt) { // 값이 같게 되는 경우 isFirst = true; // 다시 첫번째 문자를 구해야 하므로 isFirst의 값을 true로 변경 answer++; // 단어를 분리했으므로 answer 값을 하나 증가시킨다. same_cnt = 0; diff_cnt = 0; // 갯수 초기화 } } } if(same_cnt != 0 || diff_cnt != 0) answer++; // 나머지 문자가 있는 경우 하나를 더 더한다. return answer; } } | cs |
'Programmers > Lv.1' 카테고리의 다른 글
프로그래머스 Lv.1 - 문자열 내 p와 y의 개수 (0) | 2023.10.28 |
---|---|
프로그래머스 Lv.1 - 카드 뭉치 (0) | 2023.09.17 |
프로그래머스 Lv.1 - 대충 만든 자판 (0) | 2023.09.16 |
프로그래머스 Lv.1 - 소수 찾기 (0) | 2023.09.16 |
프로그래머스 Lv.1 - 기사단원의 무기 (0) | 2023.09.16 |