4673
셀프넘버 구하기
Set는 중복되지 않고 contains하지 않으면 print한다
var notSelfNumArr: Set<Int> = []
func d(_ value: Int) -> Int {
var value = value
var notSelfNum = value
while value != 0 {
notSelfNum += (value % 10)
value /= 10
}
return notSelfNum
}
for i in 1 ... 10000 {
notSelfNumArr.insert(d(i))
}
for i in 1 ... 10000 {
if !notSelfNumArr.contains(i) {print(i)}
}
1065
한수 구하기
123 처럼 일의 자리, 십의 자리, 백의 자리 각각의 숫자가 등차수열
(firstNum + thirdNum) / 2 == secondNum
let n:Int = Int(readLine()!)!
var answer: Int = 0
for i in 1 ... n {
if i < 100 {
answer += 1
} else {
let units: Int = i % 10
let tens: Int = i % 100 / 10
let hundreds: Int = i / 100
if (hundreds - tens) == (tens - units) {
answer += 1
}
}
}
print(answer)
구현하기
global변수 이런건 없고
그냥 밖에 var로 선언해서
변경하면서 써야하나부다
//북:0, 동:1, 남:2, 서: 3
//육지:0, 바다:1
let nm = readLine()!.split(separator: " ").map { Int(String($0))! }
let n = nm[0]
let m = nm[1]
let xyd = readLine()!.split(separator: " ").map { Int(String($0))! }
var x = xyd[0] //x좌표
var y = xyd[1] //y좌표
let d = xyd[2] //방향
var map = [[Int]]()
for _ in 0..<m {
let data = readLine()!.split(separator: " ").map { Int(String($0))! }
map.append(data)
}
//방문위치 저장
var visited = [[Int]](repeating: [Int](repeating: 0, count: n), count: m)
visited[x][y] = 1 //방문처리
//북동남서
let dx = [-1, 0, 1, 0]
let dy = [0, 1, 0, -1]
//왼쪽으로 회전
func turnLeft() {
direction -= 1
if direction == -1 {
direction = 3
}
}
//방문한 칸의 수
var count = 1
//방향
var direction = d
//한 칸당 체크할 모서리
var turnTime = 0
while true {
//왼쪽으로 회전하기
turnLeft()
var nx = x + dx[direction]
var ny = y + dy[direction]
//가보지 않은 칸이 존재하고 육지인 경우
if visited[nx][ny] == 0 && map[nx][ny] == 0 {
visited[nx][ny] = 1 //방문처리
x = nx
y = ny
count += 1
turnTime = 0
continue
//가봤거나 바다인 경우
} else {
turnTime += 1
}
//네 방향 모두 갈 수 없는 경우
if turnTime == 4 {
//바라보는 방향 변경하기
nx = x - dx[direction]
ny = y - dy[direction]
//뒤로 갈 수 있으면(육지이면) 뒤로 가기
if map[nx][ny] == 0 {
x = nx
y = ny
//바다라면
} else {
break
}
//1단계로 돌아가기
turnTime = 0
}
}
print(count)