Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 주울
- ZuulFilter
- BFS
- 구간 트리
- 구현
- 서비스 디스커버리
- Zuul
- spring cloud
- 트리
- 게이트웨이
- 비트마스킹
- 도커
- 완전 탐색
- 다익스트라
- Java
- Logback
- 스프링 시큐리티
- 백트래킹
- docker-compose
- 메모이제이션
- 이분 매칭
- dp
- Spring Cloud Config
- 달팽이
- 이분 탐색
- Gradle
- 플로이드 와샬
- 스택
- 유레카
- spring boot
Archives
- Today
- Total
Hello, Freakin world!
[백준 1652번][Java] 누울 자리를 찾아라 - 정규표현식(반복자) 본문
정규표현식 반복자를 활용할 수 있다면 간단하게 풀 수 있는 문제입니다.
그리고 문제 이해시 주의할 점은 단순하게 한 줄에 2개 이상의 자리가 있는지 판별하는게 아니라는 사실입니다.
예를 들어 한 줄이 ......X.. 일 경우 자리는 2개가 됩니다.
정규표현식 반복자에 대해 다른 분이 잘 정리한 글을 첨부합니다.
정규표현식을 활용하면 \.{2,} 라는 패턴을 이용해서 2개 이상의 빈 칸을 아주 손쉽게 카운트할 수 있습니다.
패턴의 의미는 . (이스케이프 필요)라는 문자를 최소 2번 이상 반복하는 문자열을 의미합니다.
(정규표현식 처음에는 표현이 어지러워서 극혐했는데 쓰면 쓸수록 재밌다는 생각이 드네요. 너무 편리합니다! 다들 써보세요~)
import java.io.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /* 누울 자리를 찾아라 https://www.acmicpc.net/problem/1652 */ public class Main { static int n; static String[] room; public static void main(String[] args) throws IOException { // InputReader reader = new InputReader("testcase.txt"); InputReader reader = new InputReader(); n = reader.readInt(); room = new String[n]; for (int i = 0; i < n; i++) { room[i] = reader.readLine(); } //가로 방향 체크 int rowSeats = 0; for (int row = 0; row < n; row++) { rowSeats += howManySeats(room[row]); } int colSeats = 0; for (int col = 0; col < n; col++) { String line = scanCol(col); colSeats += howManySeats(line); } System.out.println(rowSeats + " " + colSeats); } private static String scanCol(int col) { StringBuilder sb = new StringBuilder(); for (int row = 0; row < n; row++) { sb.append(room[row].charAt(col)); } return sb.toString(); } public static int howManySeats(String line) { Pattern pattern = Pattern.compile("(\\.{2,})"); Matcher matcher = pattern.matcher(line); int cnt = 0; while(matcher.find()) { cnt++; } return cnt; } } class InputReader { private BufferedReader br; public InputReader() { br = new BufferedReader(new InputStreamReader(System.in)); } public InputReader(String filepath) { try { br = new BufferedReader(new FileReader(filepath)); } catch (FileNotFoundException e) { e.printStackTrace(); } } public boolean ready() throws IOException { return br.ready(); } public String readLine() throws IOException { return br.readLine(); } public int readInt() throws IOException { return Integer.parseInt(readLine()); } public Long readLong() throws IOException { return Long.parseLong(readLine()); } }
'알고리즘 > PS' 카테고리의 다른 글
[백준 9935번][Java] 문자열 폭발 - 스택 (0) | 2020.09.26 |
---|---|
[백준 5052번][Java] 전호번호 목록 - 정렬 (0) | 2020.09.25 |
[백준 5719번][Java] 거의 최단 경로 - 다익스트라 [최단 경로 추적] (0) | 2020.09.25 |
[백준 2493번][Java] 탑 - Stack (0) | 2020.09.25 |
[백준 13549번][Java] 숨바꼭질 3 - 다익스트라(그래프 범위 설정) (0) | 2020.09.24 |
Comments