일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 방통대 대학원 정보과학과
- LEVEL 2
- Code Jam
- Python
- openebs
- GitLab
- hackerrank
- 해커랭크
- 파이썬
- ingress-nginx
- C++
- secondlowestgrade
- 프로그래머스
- 하늘과 바람과 별과 시
- 방송통신대학교 대학원 정보과학과
- ESXi 업데이트
- 3D PRINTING
- 하늘과 바람과 별과 詩
- swift
- Qualification Round
- on-prem
- nestedlists
- 정보과학과
- Kubernetes
- MySQL
- 2022
- 코딩테스트
- K8S
- Code Jam 2022
- Today
- Total
공대생의 비망록
[Google Code Jam][Qualification Round 2022] Punched Cards Swift 풀이 본문
[Google Code Jam][Qualification Round 2022] Punched Cards Swift 풀이
myungsup1250 2022. 4. 3. 11:41취업 준비를 위해 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 |
'Programming Language > Swift' 카테고리의 다른 글
[프로그래머스][Lv. 1] 최소직사각형 Swift 풀이 (0) | 2022.04.06 |
---|---|
[프로그래머스][Lv. 1] 예산 Swift 풀이 (0) | 2022.04.06 |
[프로그래머스][Lv. 1] 실패율 Swift 풀이 (0) | 2022.04.02 |
[프로그래머스][Lv. 1] 시저 암호 Swift 풀이 (0) | 2022.04.01 |
[프로그래머스][Lv. 1] 부족한 금액 계산하기 Swift 풀이 (0) | 2022.03.14 |