ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2866 문자열 잘라내기
    백준/해시 2022. 4. 23. 20:17

     

     

    풀이

     

    백준에 나와있는 

    3 4
    alfa
    beta
    zeta

     

    이 예시를 가지고 설명하자면,

     

    테이블의 열을 위에서 아래로 읽으라고 했으므로,

    먼저 input 배열에 아래와 같이 입력합니다.

    input[0] = abz

    input[1] = lee

    input[2] = ftt

    input[3] = aaa

     

     

    그런 다음에 

    hashmap 인 word를 이용합니다.

     

    1) word 에 abz 가 있다면 count 를 출력하고 끝내고

    => 동일한 문자열이 발견되면 반복을 멈추고 count 를 출력하라고 했으므로

    hashmap 인 word를 이용해서 동일한 문자열이 있는지 확인

     

    없다면 word 에 abz를 집어 넣습니다.

    => 다음 단어인 lee, ftt, aaa가 abz와 동일한 문자열인지 확인하기 위해

     

    그리고 input[0] = bz 로 바꿔줍니다.

    => 테이블의 가장 위 행을 지워주라고 했으므로

     

    2) lee, ftt, aaa 도 반복합니다.

     

    위의 과정이 끝나면 word 를 다시 깨끗이 비워줍니다.

    input 배열은 input[0] = bz, input[1] = ee, input[2] = tt, input[3] = aa 가 됩니다.

    위의 과정을 또 반복합니다.

     

    1) word에 bz가 있다면 count 를 출력한 뒤 끝내고, 없다면 word에 집어 넣습니다.

     

    input[0] = z가 됩니다.

     

     

    2) ee, tt, aa 도 반복합니다.

     

    이런식으로 진행됩니다.

     

    최종코드

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.StringTokenizer;
    
    public class Main {
    
    	public static void main(String[] args) throws IOException {
    		
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer st = new StringTokenizer(br.readLine(), " " );
    		
    		int R = Integer.parseInt(st.nextToken());
    		int C = Integer.parseInt(st.nextToken());
    		
    		HashMap<String, Integer> word = new HashMap<>();
    		String input[] = new String [C];
    		Arrays.fill(input, "");
    		
    		for(int i=0; i<R; i++) {
    			st= new StringTokenizer(br.readLine());
    			String alphabet[] = st.nextToken().split("");
    			for(int j =0; j<C; j++) {
    			input[j] = input[j] + alphabet[j];
    		   }
    		}
    				
    		int count = -1;
    		
    		for(int i=0; i<R; i++) {
    			for(int j=0; j<C; j++) {
    				
    				if(word.containsKey(input[j])) {
    					
    					System.out.println(count);
    					return;
    				}
    				
    				word.put(input[j], 0);
    				input[j] = input[j].substring(1,input[j].length());
    				
    			}
    			word.clear();
    			count++;
    		}
    
    		System.out.println(count);
    		
    	}
    }

     

    댓글

Designed by Tistory.