Skip to content

Commit d3d254b

Browse files
committed
[Silver IV] Title: 소가 길을 건너간 이유 2, Time: 36 ms, Memory: 32412 KB -BaekjoonHub
1 parent 16c7ec0 commit d3d254b

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# [Silver IV] 소가 길을 건너간 이유 2 - 14468
2+
3+
[문제 링크](https://www.acmicpc.net/problem/14468)
4+
5+
### 성능 요약
6+
7+
메모리: 32412 KB, 시간: 36 ms
8+
9+
### 분류
10+
11+
구현, 문자열
12+
13+
### 제출 일자
14+
15+
2025년 6월 29일 21:36:41
16+
17+
### 문제 설명
18+
19+
<p>존의 농장에는 원형 목초지가 있고, 그 둘레에 길이 둘러져 있다. 존의 소는 매일 아침 이 길을 건너가 풀을 먹고 저녁에 다시 길을 건너가 헛간으로 돌아간다.</p>
20+
21+
<p>이 소들은 자신의 습관대로 매일 똑같은 방법으로 길을 건넌다. 각각의 소는 원형 길의 정해진 한 점을 지나 들어오고, 다른 점을 지나 나간다. 어떤 두 소도 길 위의 같은 점을 지나가지 않는다. 이걸 지켜본 존은 이 점들을 분석해 보기로 했다. 소는 총 26마리고, A, B, ... Z라는 이름이 붙는다. 존은 52개의 점을 시계방향으로 보면서 각 점을 어떤 소가 지나가는지 기록했다. 이렇게 만들어 낸 52글자의 문자열에는 각 알파벳이 두 번씩 나타날 것이다.</p>
22+
23+
<p>어떤 두 소는 어떤 방법으로 걷든 그 경로가 어딘가에서 만나야 될 수도 있다. 그런 소가 총 몇 쌍인지 구해 보자.</p>
24+
25+
### 입력
26+
27+
<p>첫 줄에 52글자의 문자열이 주어진다. 각 글자는 알파벳 대문자이며, 각 알파벳이 정확히 두 번씩 나타난다.</p>
28+
29+
### 출력
30+
31+
<p>경로가 무조건 만나는 소가 몇 쌍인지 출력한다.</p>
32+
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# 14468 소가 길을 건너간 이유 2
2+
# 실버 4
3+
4+
import sys
5+
input = sys.stdin.readline
6+
7+
cow = input().strip()
8+
9+
cow_index = { chr(ord('A')+i): [] for i in range(26) }
10+
for idx, name in enumerate(cow): #cow에서 문자(A, B, C, ...)와 문자의 위치
11+
cow_index[name].append(idx)
12+
"""
13+
cow_index = {
14+
'A': [0,2],
15+
'B': [1,4],
16+
'C': [3,5],
17+
...
18+
}
19+
"""
20+
21+
cnt = 0
22+
23+
# 소 이름만 있는 리스트
24+
cow_names = list(cow_index.keys())
25+
26+
for i in range(26):
27+
a1, a2 = cow_index[cow_names[i]] #cow_names i번째 소의 각 위치(a1, a2)
28+
for j in range(i+1, 26):
29+
b1, b2 = cow_index[cow_names[j]] #cow_names j번째 소의 각 위치(b1, b2)
30+
31+
# a1 < b1 < a2 < b2 같은 식일 때 교차가 발생
32+
if (a1 < b1 < a2 < b2) or (b1 < a1 < b2 < a2):
33+
cnt += 1
34+
35+
print(cnt)

0 commit comments

Comments
 (0)