[Google Code Jam][Qualification Round 2022] Punched Cards Swift 풀이
취업 준비를 위해 Problem Solving 스킬을 연마하기 위해 관련 오픈 채팅방에 들어가 정보를 기웃거리던 차,
다양한 PS 스킬 챌린지가 있음을 알게 되었고, 100점 만점에 30점만 받아도 티셔츠 한 장은 준다길래 준비도 없이
Code Jam 이라는 챌린지에 참여하였다. Google에서 운영하는 프로그램이고 전세계의 많은 사람들이 참여하는 행사라고 한다.
실력과 준비 부족으로 많이 풀지는 못했지만 그래도 기록을 위해 남겨본다.
문제 링크 및 출처 : Google Code Jam
1번 문제는 Punched Cards - 천공카드 이다.
테스트케이스셋은 1개이며 풀이 완료 시 11점을 준다.
문제 설명은 영어로 길게 나와있지만 특별한 내용은 없고, 천공 카드 모양을 출력해내면 된다.
입력 형식은 이렇게 주어진다.
T
R C
...
R C
T는 Testcase의 수이고, 그 뒤로 이어지는 R, C는 Row(열), Column()을 의미하며 T번 반복되어 입력된다.
문제를 해결하는 방법은 간단하다.
천공카드처럼 일종의 격자 무늬를 출력하고, 그 사이에는 점을 찍으면 된다.
그러나 처음 왼쪽 위 테두리에는 격자 무늬를 출력하지 말고 점을 찍으라고 한다.
왼쪽 위 귀퉁이를 잘라 천공 카드의 방향을 정했었나보다.
'+' 문자는 짝수 행(0, 2, 4, ...)과 짝수 열(0, 2, 4, ...)에 찍으면 되고, --> [ i % 2 == 0 && j % 2 == 0 ]
'-' 문자는 짝수 행(0, 2, 4, ...)과 홀수 열(1, 3, 5, ...)에 찍으면 되며, --> [ i % 2 == 0 && j % 2 == 1 ]
'|' 문자는 홀수 행(1, 3, 5, ...)과 짝수 열(0, 2, 4, ...)에 찍으면 된다, --> [ i % 2 == 1 && j % 2 == 0 ]
마지막 '.' 문자는 홀수 행, 홀수 열에 찍어주면 격자 무늬 사이사이에 잘 들어간다. --> [ i % 2 == 1 && j % 2 == 1 ]
그리고 추가 주문이었던 왼쪽 위 모서리는 인덱스 i, j가 2보다 작으면(0, 1)
'.' 문자를 출력하도록 하면 아주 손쉽게 해결.
아래는 위의 설명을 구현한 Swift 코드이다.
Problem Solved!
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
32
33
34
35
36
37
|
import Foundation
let cases: Int = Int(readLine()!)!
var input: [[Int]] = Array(repeating: Array(repeating: 0, count: 2), count: cases)
for i in 0..<cases {
let tmp = readLine()!.split(separator: " ").map { Int($0)! }
input[i][0] = tmp[0]
input[i][1] = tmp[1]
}
for index in 0..<cases {
var punchCard: [[String]] = Array(repeating: Array(repeating: "", count: input[index][1] * 2 + 1), count: input[index][0] * 2 + 1)
print("Case #\(index + 1):")
for i in 0..<input[index][0] * 2 + 1 {
for j in 0..<input[index][1] * 2 + 1 {
if i < 2 && j < 2 { // (0, 0), (0, 1), (1, 0), (1, 1)
punchCard[i][j] = "."
} else {
if i % 2 == 0 {
if j % 2 == 0 {
punchCard[i][j] = "+"
} else {
punchCard[i][j] = "-"
}
} else {
if j % 2 == 0 {
punchCard[i][j] = "|"
} else {
punchCard[i][j] = "."
}
}
}
print("\(punchCard[i][j])", terminator: "")
}
print()
}
}
|
cs |