You will be fine

<Algorithm> 182. 가장 빠른 문자열 타이핑(SWExpert)

by BFine
반응형

1. 가장 빠른 문자열 타이핑(SWExpert)

   사용 알고리즘 : 포인터 

  • 쉬운 문제라고 생각해서 풀다가 꼼꼼한 처리를 못해서 조금 시간이 걸린 문제...

  • 문자열처리 문제는 대체로 쉽다고 생각해서 안풀어봤는데 문자열처리문제도 몇개 풀어봐야겠다는 생각이 들었다...

문제에 대한 접근&생각

  1. 문자열 처리 -> B열 갯수로 A열을 커팅해서 2중 for문 -> 비효율적!
  2. 포인터를 이용 -> A열를 왼쪽부터 탐색하면서 idx를 늘이고 줄임 -> 테케 1개 맞음;;
  3. kaall al 일때 처음 a가 중복 될 경우 0부터 시작 -> 초기값 0을 카운트!

다른 방법 풀이

  • A열을 B로 replace(B," ") 해서 이 길이를 구함;;; 생각지 못한 가장 간단한 방법이다..... 

내 코드 


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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Solution {
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int test = Integer.parseInt(br.readLine());
        for(int t =1; t <=test; t++) {
            /***************************
             * 포인터를 이용하여 타이핑할 문자열의
             * 원소를 하나씩 체크해서 타이핑 수를
             * 구한다.
             ***************************/
            String[] str = br.readLine().split(" ");
            char[] arr = str[0].toCharArray();
            int idx = 0;
            int count = 0;
            for(char cr : arr) {
                if(cr==str[1].charAt(idx)) {
                    idx ++;
                    if(idx == str[1].length()) {
                        idx = 0;
                        count-=(str[1].length()-1);
                    }
                }else if(cr==str[1].charAt(0)) {
                    idx = 1;
                }else {
                    idx = 0;
                }
                count++;
                //System.out.println(cr+" "+count+" "+idx);
            }
            System.out.println("#"+t+" "+count);
        }
    }
}
 
cs


반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기