"The Book"이라고도 불리는 러스트 프로그래밍 공식 가이드 책을 250쪽 정도까지 보고 더 진도를 나가기전에 러스트에 조금 더 익숙해지려고 잠시 멈추었습니다.
백준 문제중에 구현 카테고리에서 문제를 좀 풀어보면 익숙해지는데 도움이 좀 될거같아서 러스트로 풀어봤습니다.
문제 링크
https://www.acmicpc.net/problem/1913
풀이
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
use std::io::{self};
fn main() {
// n = N, target = 위치를 찾고자하는 자연수
let mut n = String::new();
let mut target = String::new();
// input 받기
io::stdin().read_line(&mut n);
io::stdin().read_line(&mut target);
// 숫자로 변환 (read_line시에 줄바꿈이 포함되어있어서 trim으로 제거해주어야함)
let mut n: usize = n.trim().parse().expect("");
let target: i32 = target.trim().parse().expect("");
// 2차원 배열 생성
let mut arr = vec![vec![0; n]; n];
// 타입 문제로 인해 변환
let mut start_num: i32 = n as i32;
let mut start_num: i32 = start_num*start_num;
dfs(&mut arr, start_num, n, 0, 0);
// 정답 좌표
let mut target_x: usize = 0;
let mut target_y: usize = 0;
// 정답 배열 출력
for i in 0..n {
for j in 0..n {
print!("{} ", arr[i][j]);
if arr[i][j] == target {
target_x = i+1;
target_y = j+1;
}
}
println!();
}
println!("{} {}", target_x, target_y);
}
// (start_x, start_y)에서 start_num을 1씩 감소하며 바깥에서부터 배열을 채워나감
// n-1만큼 채우고 방향을 바꿈
fn dfs(arr:&mut Vec<Vec<i32>>, mut start_num: i32, n: usize, mut start_x: usize, mut start_y: usize) {
if n == 1 {
arr[start_x][start_y] = 1;
return;
}
// 위에서 아래로
for i in 0..n-1 {
arr[start_x][start_y] = start_num;
start_num -= 1;
start_x += 1;
}
// 왼쪽에서 오른쪽으로
for i in 0..n-1 {
arr[start_x][start_y] = start_num;
start_num -= 1;
start_y += 1;
}
// 아래에서 위로
for i in 0..n-1 {
arr[start_x][start_y] = start_num;
start_num -= 1;
start_x -= 1;
}
// 오른쪽에서 왼쪽으로
for i in 0..n-1 {
arr[start_x][start_y] = start_num;
start_num -= 1;
start_y -= 1;
}
start_x += 1;
start_y += 1;
dfs( arr, start_num, n-2, start_x, start_y);
}
|
cs |
'알고리즘' 카테고리의 다른 글
백준 12933번 오리 Rust 풀이 (0) | 2021.10.11 |
---|---|
백준 14467번 Rust 풀이 (0) | 2021.10.10 |
카카오 인턴십 표 편집 (Python) (0) | 2021.08.21 |
백준 사회망 서비스(Python/Go) (0) | 2021.04.15 |
백준 단지번호 붙이기(Go) (0) | 2021.04.11 |