Heestory

10.가장 짧은 문자 거리 / 11.문자열 압축 본문

개발(~국비)/코테대비

10.가장 짧은 문자 거리 / 11.문자열 압축

까만밀가루 2022. 11. 3. 10:22

본 내용은 저작권상 수업 내용을 간단하게 정리한 것입니다.


 

10.최소 거리

  • 정방향/역방향 각각 for문을 돌린다.
  • 마지막 for문에선 Math.min을 이용하여 정방향/역방향에서의 거리를 비교하여 최소거리를 답한다.
        //받은 문자열 길이만큼의 배열 생성
        int[] answer = new int[str.length()];
        //가장 기본 값 p=1000로 설정
        int p =1000;
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==c){
                p=0;
                answer[i]=p;
            }else{
                p++;
                answer[i]=p;
            }
        }
        //최소 거리를 구해야하기 때문에 for문을 역으로 이중으로 돌려야함
        for(int i=str.length()-1;i>=0;i--){
            //이미 위에서 p=0, answer[]배열에 넣었음, 최소거리는 0으로 동일하기 때문에 p=0이라고만 한다.
            if(str.charAt(i)==c) p=0;
            //p값을 앞의 값과 비교하여 최소 거리를 answer에 넣는다.
            else{
                p++;
                answer[i]=Math.min(answer[i], p);
            }
        }

 

 

11.문자열 압축

        //받은 문자열 맨 끝에 빈문자 하나 추가, 추가한 이유는 아래 배열 에러를 잡기 위함
        str = str+" ";
        int cnt=1;
        //길이 주의, 빈문자 전까지만 진행
        for(int i=0;i<str.length()-1;i++){
            if(str.charAt(i)==str.charAt(i+1)) cnt++;
            else{
                answer += str.charAt(i);
                //받은 cnt는 String 형태여야 한다.
                if(cnt>1) answer += String.valueOf((cnt));
                cnt=1;
            }
        }

'개발(~국비) > 코테대비' 카테고리의 다른 글

2-3.가위바위보  (0) 2022.11.13
2-1.큰 수 출력/보이는 학생  (0) 2022.11.11
08.replaceAll(정규식 이용) / 09.숫자만 추출  (0) 2022.11.02
07.회문 문자열  (0) 2022.11.01
06.중복 제거  (0) 2022.11.01