카테고리 없음

[프로그래머스 / 코딩테스트 입문 / 자바(JAVA)] 문자열 밀기

읁; 2024. 3. 8. 19:45

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/120921

 

프로그래머스

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

programmers.co.kr

 

▼ ▼ ▼

정답 풀이로 바로 가기

▲ ▲ ▲

내 풀이 (정답)

로직

A를 char 배열로 만들어서 배열 요소를 한 칸씩 밀어낸다...

근데 솔직히 이것보다 더 효율적으로 할 수 있을텐데.. 라고 생각하면서 코드를 짰다.

코드

class Solution {
    public int solution(String A, String B) {
        int answer = 0;
        char[] arr = A.toCharArray();

        for(int i=0; i<A.length();i++) {
            if(new String(arr).equals(B)) break;

            char next = arr[0];
            arr[0] = arr[arr.length-1];

            for(int j=0; j<A.length()-1;j++) {
                char temp = arr[j+1];
                arr[j+1] = next;
                next = temp;
            }

            answer++;
        }

        return (new String(arr).equals(B))?answer:-1;
    }
}

채점 결과

정확성  테스트
테스트 1 〉    통과 (0.04ms, 73.6MB)
테스트 2 〉    통과 (0.05ms, 73.5MB)
테스트 3 〉    통과 (0.04ms, 77.2MB)
테스트 4 〉    통과 (0.06ms, 71.7MB)
테스트 5 〉    통과 (0.04ms, 77.2MB)
테스트 6 〉    통과 (0.03ms, 75.8MB)
테스트 7 〉    통과 (0.04ms, 74.9MB)
테스트 8 〉    통과 (0.03ms, 80.9MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0

 

좋은 풀이

kimtaehan11@gmail.com , 이규민 님의 코드

class Solution {
    public int solution(String A, String B) {
        String tempB = B.repeat(3);
        return tempB.indexOf(A);
    }
}

배운 점

솔직히 이런 사람 보면 벽 느낀다 ㄱ-.. 흑흑

 

 

김진호 , Bokyeong Kang , 도인호 , look 님의 코드

class Solution {
    public int solution(String A, String B) {
        int answer = -1;
        String temp = A;
        for(int i = 0 ; i < A.length() ; i++){
            if(temp.equals(B)){
                answer = i;
                break;
            }
            temp = temp.charAt(A.length()-1) + temp.substring(0, A.length()-1);

        }
        return answer;
    }
}

배운 점 (로직 이해해보기)

  1. 한 칸씩 밀어낸 문자열을 만드는 코드를 이렇게 짰다.
    • temp.charAt(A.length()-1) temp의 가장 뒷글자를 가장 앞에 붙이고,
    • temp.substring(0, A.length()-1) temp의 가장 앞 글자부터 가장 마지막 글자 전 까지 자름
  2. 만약 temp가 B랑 같으면 answer를 i로 하고 반복문을 벗어난다.