본문 바로가기
Algorithm/문제풀이_백준

[Swift][구현] 백준 2290번 (LCD Test)

by Joahnee 2022. 4. 26.

요구능력

구현

 

문제풀이

1) 우선 arr배열에 s가 1일때 만들 수 있는 숫자의 형태를 모두 저장해줬다.

3차원 배열로 저장했고 " "의 경우에는 0으로 저장하고, "-"나 "|"의 경우에는 1로 저장하였다.

 

2) 규칙찾기

2로 나누어 떨어지는 곳은 "-"이다.

문제를 보면 알겠지만, 2로 나누어떨어지는 곳은 "-"이다.

그리고 2로 나누어 떨어지는 곳은 양쪽 끝이 " "이고, "-"문자가 s개만큼 생긴다.

그래서 문제에서 s + 2라고 한것이다.

 

2로 나누어 떨어지지 않는 곳은 "|"이다.

양쪽끝이 "|"이고, " "공백이 s개만큼 생긴다.

2로 나누어 떨어지는곳과 다른점은

2로 나누어 떨어지지 않는곳은 세로로 s줄만큼 더 생긴다는 것이다.

 

이게, 말로설명하고 그림으로 설명하는것보다 직접 코드를 쳐보면서 출력해보면서 이해하는게 빠를것이다.

 

후기

구현 열심히해야겠다.

 

코드

let sn = readLine()!.split(separator: " ").map{String($0)}
let s = Int(sn[0])!
var n = [Int]()
for i in Array(sn[1]){
    n.append(Int(String(i))!)
}

let arr = [
    [[0, 1, 0], [1, 0, 1], [0, 0, 0], [1, 0, 1], [0, 1, 0]],
    [[0, 0, 0], [0, 0, 1], [0, 0, 0], [0, 0, 1], [0, 0, 0]],
    [[0, 1, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 0]],
    [[0, 1, 0], [0, 0, 1], [0, 1, 0], [0, 0, 1], [0, 1, 0]],
    [[0, 0, 0], [1, 0, 1], [0, 1, 0], [0, 0, 1], [0, 0, 0]],
    [[0, 1, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 1, 0]],
    [[0, 1, 0], [1, 0, 0], [0, 1, 0], [1, 0, 1], [0, 1, 0]],
    [[0, 1, 0], [0, 0, 1], [0, 0, 0], [0, 0, 1], [0, 0, 0]],
    [[0, 1, 0], [1, 0, 1], [0, 1, 0], [1, 0, 1], [0, 1, 0]],
    [[0, 1, 0], [1, 0, 1], [0, 1, 0], [0, 0, 1], [0, 1, 0]]
]

for r in 0..<5{
    if r % 2 == 0{
        for i in 0..<n.count{
            let d = n[i]
            print(" ", terminator: "")
            for _ in 0..<s{
                print(arr[d][r][1] == 1 ? "-" : " ", terminator: "")
            }
            print(" ", terminator: "")
            print(i == n.count - 1 ? "\n" : " ", terminator: "")
        }
    }else{
        for _ in 0..<s{
            for i in 0..<n.count{
                let d = n[i] //현재 수
                print(arr[d][r][0] == 1 ? "|" : " ", terminator: "")
                for _ in 0..<s{
                    print(" ", terminator: "")
                }
                print(arr[d][r][2] == 1 ? "|" : " ", terminator: "")
                print(" ",terminator: "") //각 숫자사이의 공백
            }
            print()
        }
    }
}

댓글