-
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); } }