Skip to content

Commit 7b804cf

Browse files
committed
[Silver IV] Title: 소가 길을 건너간 이유 2, Time: 8 ms, Memory: 79508 KB -BaekjoonHub
1 parent 01689ac commit 7b804cf

2 files changed

Lines changed: 64 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+
메모리: 79508 KB, 시간: 8 ms
8+
9+
### 분류
10+
11+
구현, 문자열
12+
13+
### 제출 일자
14+
15+
2025년 12월 23일 17:48:04
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: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import Foundation
2+
3+
let s = Array(readLine()!)
4+
var first = Array(repeating: -1, count: 26)
5+
var second = Array(repeating: -1, count: 26)
6+
7+
for i in 0..<s.count {
8+
let idx = Int(s[i].asciiValue! - Character("A").asciiValue!)
9+
if first[idx] == -1 {
10+
first[idx] = i
11+
} else {
12+
second[idx] = i
13+
}
14+
}
15+
16+
var answer = 0
17+
18+
for i in 0..<26 {
19+
for j in i+1..<26 {
20+
let a1 = first[i]
21+
let a2 = second[i]
22+
let b1 = first[j]
23+
let b2 = second[j]
24+
25+
if (a1 < b1 && b1 < a2 && a2 < b2) ||
26+
(b1 < a1 && a1 < b2 && b2 < a2) {
27+
answer += 1
28+
}
29+
}
30+
}
31+
32+
print(answer)

0 commit comments

Comments
 (0)