티스토리 뷰
문제
https://www.acmicpc.net/problem/14891
풀이
구현만 하면 되는 문제였음.
아예 왼쪽으로 돌리는 함수, 오른쪽으로 돌리는 함수, 톱니바퀴가 돌아가면 같이 돌아가는 톱니바퀴를 반환하는 함수, 톱니바퀴가 돌아갈때 돌아갈 방향을 반환하는 함수를 전부 구현하였다.
Swift
import Foundation
//var input: [[String]] = []
//for _ in 0..<3 {
// input.append(readLine()!.map { String($0) })
//}
//var count = Int(readLine()!)!
var input = [["1","0","0","1","0","0","1","1"],
["0","1","0","1","0","0","1","1"],
["1","1","1","0","0","0","1","1"],
["0","1","0","1","0","1","0","1"]]
//var count = 8
//var data: [[Int]] = []
var data = [[1,1],[2,1],[3,1],[4,1],[1,-1],[2,-1],[3,-1],[4,-1]]
private func changeLeft(_ gear: [String], _ num: Int) {
print("left로 바꾸기 이전: \(gear)")
var new = gear
let first = new[0]
for i in 0..<gear.count - 1 {
new[i] = new[i + 1]
}
new[7] = first
print("left 이후: \(new)")
input[num] = new
}
private func changeRight(_ gear: [String], _ num: Int){
print("right 이전: \(gear)")
var new = gear
let last = new[7]
for i in stride(from: 7, through: 1, by: -1) {
new[i] = new[i - 1]
}
new[0] = last
print("right 이후: \(new)")
input[num] = new
}
private func getGearDir(_ first: Int, _ dir: Int) -> [Int] {
if first % 2 == 0 {
return [-dir,dir,-dir,dir]
} else {
return [dir,-dir,dir,-dir]
}
}
private func getChangingGear(_ first: Int) -> [Int] {
if first == 1 {
//두번째꺼확인하면됨
if input[0][2] == input[1][6] {
//같으면 안돌아감 여기서 끝
return [1]
} else {
//다르면 다시 두번째꺼랑 세번째꺼 비교해야함
if input[1][2] == input[2][6] {
return [1,2]
} else {
if input[2][2] == input[3][6] {
return [1,2,3]
} else {
return [1,2,3,4]
}
}
}
} else if first == 2 {
if input[0][2] == input[1][6] {
if input[1][2] == input[2][6] {
return [2]
} else {
if input[2][2] == input[3][6] {
return [2,3]
} else {
return [2,3,4]
}
}
} else {
if input[1][2] == input[2][6] {
return [1,2]
} else {
if input[2][2] == input[3][6] {
return [1,2,3]
} else {
return [1,2,3,4]
}
}
}
} else if first == 3 {
if input[2][2] == input[3][6] {
if input[1][2] == input[2][6] {
return [3]
} else {
if input[0][2] == input[1][6] {
return [2,3]
} else {
return [1,2,3]
}
}
} else {
if input[1][2] == input[2][6] {
return [3,4]
} else {
if input[0][2] == input[1][6] {
return [2,3,4]
} else {
return [1,2,3,4]
}
}
}
} else {
//두번째꺼확인하면됨
if input[2][2] == input[3][6] {
//같으면 안돌아감 여기서 끝
return [4]
} else {
//다르면 다시 두번째꺼랑 세번째꺼 비교해야함
if input[1][2] == input[2][6] {
return [3,4]
} else {
if input[0][2] == input[1][6] {
return [2,3,4]
} else {
return [1,2,3,4]
}
}
}
}
}
//for _ in 0..<count {
// data.append(readLine()!.split(separator: " ").map { Int(String($0))! })
//}
for i in 0..<data.count {
let cur = data[i]
let dir = getGearDir(cur[0],cur[1]) //방향
let gears = getChangingGear(cur[0]) //바뀌는 기어들
print(cur, dir, gears)
for gear in gears {
print("현재 바퀴: \(gear)")
if dir[gear - 1] == 1 {
changeRight(input[gear-1], gear - 1)
} else {
changeLeft(input[gear-1], gear - 1)
}
}
print("=================바뀐 후")
print(input)
print("========================")
}
var result = 0
for i in 0..<4 {
if input[i][0] == "1" {
switch i {
case 0:
result += 1
case 1:
result += 2
case 2:
result += 4
default:
result += 8
}
}
}
print(result)
Python
gears = []
datas = []
for _ in range(4):
gears.append(input())
k = int(input())
for _ in range(k):
datas.append(list(map(int,input().split())))
def getChangingGears(num):
if num == 1:
if gears[0][2] == gears[1][6]:
return [1]
else:
if gears[1][2] == gears[2][6]:
return [1,2]
else:
if gears[2][2] == gears[3][6]:
return [1,2,3]
else:
return [1,2,3,4]
elif num == 2:
if gears[0][2] == gears[1][6]:
if gears[1][2] == gears[2][6]:
return [2]
else:
if gears[2][2] == gears[3][6]:
return [2,3]
else:
return [2,3,4]
else:
if gears[1][2] == gears[2][6]:
return [1,2]
else:
if gears[2][2] == gears[3][6]:
return [1,2,3]
else:
return [1,2,3,4]
elif num == 3:
if gears[2][2] == gears[3][6]:
if gears[1][2] == gears[2][6]:
return [3]
else:
if gears[0][2] == gears[1][6]:
return [2,3]
else:
return [1,2,3]
else:
if gears[1][2] == gears[2][6]:
return [3,4]
else:
if gears[0][2] == gears[1][6]:
return [2,3,4]
else:
return [1,2,3,4]
else:
if gears[2][2] == gears[3][6]:
return [4]
else:
if gears[1][2] == gears[2][6]:
return [3,4]
else:
if gears[0][2] == gears[1][6]:
return [2,3,4]
else:
return [1,2,3,4]
def changeLeft(gear, gearNum):
new = list(gear)
first = new[0]
for i in range(len(new) - 1):
new[i] = new[i + 1]
new[7] = first
gears[gearNum] = ''.join(new)
def changeRight(gear,gearNum):
new = list(gear)
last = new[7]
for i in range(7,0,-1):
new[i] = new[i - 1]
new[0] = last
gears[gearNum] = ''.join(new)
def getGearDir(gearNum, dir):
if gearNum % 2 == 0:
return [-dir,dir,-dir,dir]
else:
return [dir,-dir,dir,-dir]
for i in range(len(datas)):
tempDir = getGearDir(datas[i][0],datas[i][1])
tempGears = getChangingGears(datas[i][0])
for gear in tempGears:
if tempDir[gear - 1] == 1:
changeRight(gears[gear - 1], gear - 1)
else:
changeLeft(gears[gear - 1], gear - 1)
result = 0
for i in range(4):
if gears[i][0] == "1":
if i == 0:
result += 1
elif i == 1:
result += 2
elif i == 2:
result += 4
else:
result += 8
print(result)
_____________________________________________________________________________________________________
파이썬 문법때문에 오래걸림..
'PS' 카테고리의 다른 글
[Python] 백준_상어 초등학교(21608) (0) | 2023.03.16 |
---|---|
[Python] 백준_마법사 상어와 비바라기(21610) (0) | 2023.03.16 |
[Swift/Python] 백준_음식물 피하기(1743) (1) | 2023.03.11 |
[Python] 백준_단지번호붙이기(2667) (0) | 2023.03.11 |
[Swift/Python] 백준_DFS와 BFS(1260) (6) | 2023.03.09 |
댓글
최근에 올라온 글
- Total
- Today
- Yesterday