https://www.acmicpc.net/problem/1652
1652번: 누울 자리를 찾아라
첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다.
www.acmicpc.net
간단한 문자열 탐색 문제다. 문제를 이해하는 시간이 더 길었던 문제다.
풀이
문제에 대한 설명이 부실하다고 생각되지만, 내 문해력이 부족한 것이라고 생각해야겠다. 예제를 그림으로 설명하면 다음과 같다.

즉 두 칸 이상의 공간이 생기면 해당공간을 하나의 누울 자리로 취급하겠다는 이야기.

주의해야 할 사항으로 자리는 벽과 짐으로 구분한다는 것을 잊지 말아야 한다.
입력되는 문자열을 기준으로 가로배열과 세로배열을 생성. 두 배열을 "X"문자열을 기준으로 split() 함수를 통해 빈 공간을 탐색하였다.
정답 코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
let n = Int(readLine()!)! | |
var horizen = Array(repeating: "", count: n) | |
var vertical = Array(repeating: "", count: n) | |
var ans = [0,0] | |
for i in 0..<n{ | |
let line = readLine()!.map{String($0)} | |
for k in 0..<n{ | |
horizen[i] += line[k] | |
vertical[k] += line[k] | |
} | |
} | |
for i in 0..<n{ | |
let h = horizen[i].split(separator: "X") | |
let v = vertical[i].split(separator: "X") | |
for space in h{ | |
if space.contains(".."){ ans[0] += 1} | |
} | |
for space in v{ | |
if space.contains(".."){ ans[1]+=1 } | |
} | |
} | |
print(ans[0],ans[1]) |

'Problem Solving > BOJ' 카테고리의 다른 글
[1484] 다이어트 (0) | 2023.01.18 |
---|---|
[2118] 두 개의 탑 (0) | 2023.01.17 |
[15565] 귀여운 라이언 (0) | 2023.01.15 |
[1337] 올바른 배열 (0) | 2023.01.14 |
[10025] 게으른 백곰 (0) | 2023.01.13 |