지식

[프로그래머스] 문자열 나누기(with java)

애앨리 2022. 12. 11. 22:23

https://school.programmers.co.kr/learn/courses/30/lessons/140108

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이문제인데 문제가 문자열에 대한 인지 능력 배열  Loop 에 관한 이해도가 낮으면 풀기 좀 어려울듯

나는 이 문제 본격적으로 풀어야지? 하고 문제를 봤는데 문제 이해하는데만 1시간은 넘게 걸린듯

(인터뷰한 그 분은 바로 이해 하고 15분만에 코드짜서 통과하던데 그래서 충격 받아서 나도 풀어보기 시작)

 

문제의 내용이 랜덤한 문자열에서 첫번째 문자와 다음 문자열을 비교하여 어쩌구 저쩌구 였는데 무슨 말을 이렇게 어렵게 써놓았던건지

 

첫번째 문자와 같은 문자의 갯수와 다른 문자의 갯수가 같아지는 위치가 몇번이 발생하는지 찾고 더이상 비교할 문자열이 없을 경우에도 발생도 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
35
36
37
38
39
40
41
42
class Solution {
    public int solution(String s) {
        int answer = 0,sameCnt = 0,diffCnt = 0,strNumbs = 1;
        
        char firstStr = s.charAt(0);        
        char[] stringArr = s.toCharArray(); 
        
        for(char str:stringArr){    
            // System.out.println("firstr : " + firstStr);
            // System.out.println("diffstr : " + str);
            // 첫번째 문자열 과 비교
            if(firstStr==str){
                sameCnt++;
            }else{
                diffCnt++;
            }
            // System.out.println("sameCnt : " + sameCnt);
            // System.out.println("diffCnt : " + diffCnt);
            //문자가 같은 횟수와 다른 문자의 횟수가 같을경우
            //첫 문자의 위치를 지금 까지 찾은 문자 다음으로 셋팅한다. 
            if(sameCnt==diffCnt){
                answer++;
                firstStr=stringArr[strNumbs];
                // System.out.println("newFirstr : " + firstStr);
                sameCnt=0;
                diffCnt=0;
            }
            
            
            //다음문자를 찾는 위치가 전체 문자열의 길이보다 클경우 array 범위초과 에러가
            //발생하기에 미리 막기 try catch를 써서 무시 할까하다가 애초에 막는걸로 변경
            //마지막 남은 비교 문자가 최초문자가 같은 경우의 수가 있기때문에 >= 로 적용
            if(strNumbs+1>=stringArr.length){
                answer++;
                break;
            }else{
                strNumbs++;
            }          
        }
        return answer;
    }
}
cs

주석을 남겨 놓았으니 이해가 될꺼다.

다 풀어놓고서  다른 사람들이 작성 한 코드를 봤는데.

일단 자주 사용하지 않는 펑션 toCharArray, charAt  이 펑션을 쓸일이 있었나?

알고리즘 연습 할때는 문자열 가지고 장난을 자주 하지만.. 쩝.. 실무랑 학습이랑은 다른거 아닌가?

생각이 다름이라고 인정 하고 싶지만 먼가 아쉽다.

 

 

여기서 부터는 사담 ----

몇일전 이 글을 쓰고 있는날이 (22.12.11) 일요일이니까 그러니까 4일전 목요일 개발자 인터뷰가 있었다.

5년차 개발자 분이셨는데 다른 개발자 분이 질문을 엄청 했는데 모든 질문에 거의 완벽한 대답

class 와 instance의 차이 스프링과 스프링부트의 차이 스웨거사용 vue.js등등 너무나도 완벽 했던 그분

불과 몇일전 인터뷰때 공격했다고 한소리 들은 상태라 의심가는 점들이 몇몇 있었지만 한개도 안했다.

 

공부를 진짜 열심히 하셨거나 아니면 사전 질문 유출이 있었거나(?) 근데 별 개의치 않는다.

실무 투입해서 해보면 다 드러날 일이니까 

 

라이브 코딩 테스트도 진행 이전에 가끔 시간날때 했던

백준 https://www.acmicpc.net/workbook/top 

 

인기 문제집 - 1 페이지

 

www.acmicpc.net

(몇몇 문제들은 이 블로그에 리뷰를 하기도 했었다.)

 

이곳에서 연슬을 했는데 이제는 다른가보네? 

새로운 그분을 통해서 알게된 프로그래머스 

https://school.programmers.co.kr/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

여기가 새로운 스타트업이고 신상이라고? 여기도 나름 잼있을듯하여 도전!!