Algorithm/백준
[백준] 14468 소가 길을 건너간 이유2
SSONGMI
2021. 5. 19. 21:32
반응형
문제 출처: https://www.acmicpc.net/problem/14468
14468번: 소가 길을 건너간 이유 2
존의 농장에는 원형 목초지가 있고, 그 둘레에 길이 둘러져 있다. 존의 소는 매일 아침 이 길을 건너가 풀을 먹고 저녁에 다시 길을 건너가 헛간으로 돌아간다. 이 소들은 자신의 습관대로 매일
www.acmicpc.net
1. 입력
: 첫 줄에 52글자의 문자열이 주어진다. 각 글자는 알파벳 대문자이며, 각 알파벳이 정확히 두 번씩 나타난다.
2. 출력
: 경로가 무조건 만나는 소가 몇 쌍인지 출력한다.
3. 풀이
: 위와 같이 A와 B의 한 점을 지나 들어오는 것과 나가는 것이 엇갈려 있을 때 서로 만난다는 것을 알 수 있다.
: 이런 경우는 A.시작점 < B.시작점 이고 B.시작점 < A.끝점이고 A.끝점 < B.끝점 임을 만족해야 한다.
: pos1에는 시작점을 pos2에는 끝점을 저장한다.
: 문자열을 순회하며 위 조건을 만족하면 카운트를 증가시킨다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder sb = new StringBuilder();
static StringTokenizer st;
public static void main(String[] args) throws IOException {
String str = br.readLine();
int pos1[] = new int[26];
int pos2[] = new int[26];
int cnt = 0;
for(int i = 0; i < 52; i++) {
int idx = str.charAt(i)-'A';
if(pos1[idx] == 0) pos1[idx] = i+1;
else pos2[idx] = i+1;
}
for(int i = 0; i < 26; i++) {
for(int j = 0; j < 26; j++) {
if(pos1[i] < pos1[j] && pos1[j] < pos2[i] && pos2[i] < pos2[j])cnt++;
}
}
System.out.println(cnt);
}
}
반응형