본문 바로가기

알고리즘/🥈 실버

백준 1235 학생 번호 자바 풀이, 반례

728x90

난이도 : 실버4

풀이일 : 2401114

https://www.acmicpc.net/problem/1235

 

1235번: 학생 번호

첫째 줄에는 학생의 수 N(2≤N≤1,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 학생의 학생 번호가 순서대로 주어진다. 모든 학생들의 학생 번호는 서로 다르지만 그 길이는 모두 같으며, 0부

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제캡쳐


풀이 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;

    public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		String[] students = new String[n];
		HashSet<String> num = new HashSet<>();
		
		for (int i = 0; i < n; i++) {
			students[i] = br.readLine();
		}
		
		for (int i = 1; i <= students[0].length(); i++) {
			for (int j = 0; j < n; j++) {
				num.add(students[j].substring(students[0].length() - i));
			}
			
			if (num.size() == n) {				
				System.out.println(i);
				return;
			}
			num.clear();
		}
	}
}

배운 것

  • subString(startnum, endnum) : startnum부터 문자열을 자르기
  • set.clear : hashset 모든 요소 삭제

풀이

  • 중복을 허용하지 않기 위해 hashset을 사용
  • 1부터 숫자를 늘려가며, 뒤에서 해당 숫자만큼의 자릿수를 자른 학생들의 번호를 hastset에 추가
  • hastset의 요소 수가 학생수와 같다면, 몇 자리의 수를 잘랐는지 출력

반례

입력 3
1
2
3
출력 1

느낀점

  • 자바로는 실버 문제만 풀어야지.
  • 조건을 꼼꼼하게 보지 않아, 반복문의 i 크기 조건을 잘못 설정해서 한 번 틀렸다.
  • 한 자리수일때, 한 번 틀렸어서 반례로 기록한다.