2024-02-05
오늘은
- 자소서 마무리
- 업랜디
- 마에스트로 체크리스트: SQL 강좌, 오픈채팅방 참여 등 완료
먼저, 프로젝트 계획서 작성을 완료했다. 심리학과 AI에 관련한 프로젝트다.
SW 마에스트로 지원 서류를 오늘 넣었다.
그리고, 업랜디를 했다.
업다운 랜덤 디펜스 출제 목록
24446 알고리즘 수업 - 너비 우선 탐색 3 (해결 - BFS)
1986 체스 (실패 후 해결 - 시뮬레이션)
알고리즘 수업 - 너비 우선 탐색 3
알고리즘 수업 - 너비 우선 탐색 3은 BFS 기초 문제였다. 하나 깨달은 점은 adj 배열을 선언할 때 미리 크기를 할당해버리면 메모리 낭비라는 것. 인접 간선 배열은 정점의 수 N 미만일 수도 있기에 크기를 미리 할당하지 않기로.adj.assign(N + 1, std::vector<int>());
체스
체스 문제는 체스판 N*M과 각 기물의 위치(모두 상대편)가 주어졌을 때 안전한 칸이 몇개인지 출력하는 시뮬레이션 문제였다.
아주 무난하게 코드를 구성하고 있었는데, 시간(30분)내에 풀지 못해서 실패했다.
생각하는 속도를 키워야겠다. 로직을 구성하는데 시간이 많이 잡아먹힌 부분은 퀸의 경로에 다른 기물이 있으면 장애물이 되어서 더 효력을 미치지 못하는 것을 어떻게 구현할지 생각을 안하고 코드를 짰다. 그래서 중간에 코드를 한번 바꿨다. 이 과정에서 시간이 조금 잡아먹혔다.
그리고 행과 열, 2차원 배열 N*M에 대해 어디가 X축이고 어디가 Y축인지 헷갈려서 시간을 조금 더 소요했다.
N*M의 경우 N이 Y축, M이 X축인게 common sense처럼 받아들여진다.
행과 열의 경우 행이 Y축, 열이 X축이다. 이게 자꾸 헷갈린다.. :(
// 백준: 체스
// https://www.acmicpc.net/problem/1986
// 2024-02-05
#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>
std::vector<std::vector<int>> board_info;
std::vector<std::pair<int, int>> queens; // X, Y
std::vector<std::pair<int, int>> knights;
int k_dx[] = {1, -1, 1, -1, 2, -2, 2, -2};
int k_dy[] = {2, 2, -2, -2, 1, -1, -1, 1};
int q_dx[] = {0, 0, 1, -1, -1, -1, 1, 1};
int q_dy[] = {1, -1, 0, 0, -1, 1, -1, 1};
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
int height, width;
std::cin >> height >> width;
board_info.assign(height + 1, std::vector<int>(width + 1, 0)); // 0 안전 1 위험 2 퀸 3 나이트 4 폰
// 퀸 입력
int queen_num, knight_num, pawn_num;
std::cin >> queen_num;
for (int i = 1; i <= queen_num; ++i) {
int x, y;
std::cin >> y >> x;
queens.push_back({x, y});
board_info[y][x] = 2;
}
std::cin >> knight_num;
for (int i = 1; i <= knight_num; ++i) {
int x, y;
std::cin >> y >> x;
knights.push_back({x, y});
board_info[y][x] = 3;
}
std::cin >> pawn_num;
for (int i = 1; i <= pawn_num; ++i) {
int x, y;
std::cin >> y >> x;
board_info[y][x] = 4;
}
// 퀸 경로 계산
for (const auto q : queens) {
for (int i = 0; i < 8; ++i) {
int nx = q.first + q_dx[i];
int ny = q.second + q_dy[i];
while (1) {
if (!(nx > 0 && ny > 0 && nx <= width && ny <= height))
break; // 맵 밖 종료
if (board_info[ny][nx] == 4 || board_info[ny][nx] == 3)
break; // 장애물 종료
board_info[ny][nx] = 1;
nx += q_dx[i];
ny += q_dy[i];
}
}
}
// 나이트 경로 계산
for (const auto k : knights) {
for (int i = 0; i < 8; ++i) {
int nx = k.first + k_dx[i];
int ny = k.second + k_dy[i];
if (!(nx > 0 && ny > 0 && nx <= width && ny <= height))
continue; // 맵 밖 스킵
board_info[ny][nx] = 1;
}
}
int count = 0;
for (int i = 1; i <= height; ++i) {
for (int j = 1; j <= width; ++j) {
if (board_info[i][j] == 0)
count++;
}
}
std::cout << count;
return 0;
}
최종 평가
[스터디노트 평가: 2024-02-05]
1. **프로젝트 계획서 및 SW 마에스트로 지원**
- 심리학과 AI를 접목한 프로젝트 계획서 작성과 SW 마에스트로 지원은 여러분의 다양한 관심사와 진로에 대한 열정을 보여줍니다. 이는 학습뿐만 아니라 실제 적용 가능한 프로젝트에 대한 귀중한 경험이 될 것입니다.
2. **업다운 랜덤 디펜스**
- **24446 알고리즘 수업 - 너비 우선 탐색 3**: BFS 기초에 대한 이해와 메모리 효율성에 대한 깨달음은 알고리즘 학습 과정에서 중요한 통찰입니다.
- **1986 체스**: 시뮬레이션 문제 해결 과정에서의 시간 관리, 로직 구성, 그리고 2차원 배열의 이해 등은 문제 해결 능력을 증진시키는 좋은 학습 과정입니다. 특히, 기물의 이동 경로와 장애물 처리, 축의 이해는 프로그래밍 능력을 한층 더 발전시키는 중요한 요소입니다.
3. **기술적 깊이 및 개인 발전**
- 문제 해결 과정에서의 시간 관리와 로직 구성, 2차원 배열 및 축에 대한 이해는 프로그래밍 능력의 성장을 보여줍니다. 다양한 알고리즘을 적용하고 해결 방법을 모색하는 과정은 기술적 깊이를 더합니다.
4. **평가 및 조언**
- 이번 활동을 종합적으로 평가할 때, 92점을 부여합니다. SW 마에스트로 지원, 프로젝트 계획서 작성 등 다양한 활동과 업다운 랜덤 디펜스 문제 해결 과정에서 보여준 능력은 여러분의 학습과 개인 발전에 큰 도움이 될 것입니다. 문제 해결 시 발생한 시간 관리 및 로직 구성의 어려움을 극복하기 위해 더 많은 실습과 반복 학습이 필요합니다.
- 체스 문제 해결 과정에서 시간 내에 문제를 해결하지 못한 점과 2차원 배열 및 축에 대한 혼동은 앞으로의 학습 방향에 있어 중요한 지표가 될 수 있습니다. 이와 관련하여 더 많은 실습을 통해 속도와 정확성을 향상시키고, 시각적인 이해를 돕는 다양한 방법을 시도해 보시기를 권장합니다.
[피드백 요약]
- 프로젝트 계획 및 SW 마에스트로 지원은 개인 발전을 위한 훌륭한 발판입니다.
- 알고리즘과 문제 해결 과정에서의 성장이 돋보입니다.
- 시간 관리와 2차원 배열의 이해에 더 집중할 필요가 있습니다.
[조언]
- 시간 관리와 문제 해결 속도 향상을 위한 전략적 접근이 필요합니다.
- 2차원 배열과 축에 대한 이해를 깊이 있게 다지기 위한 추가 학습을 권장합니다.
'일일 스터디노트' 카테고리의 다른 글
240207: 프로그래머스 고득점 킷 - Queue/Stack 완료 (0) | 2024.02.07 |
---|---|
240206: 프로그래머스 고득점 Kit 시작, 해시 / 스택 / 큐. 업랜디도 한판 ... (0) | 2024.02.06 |
240204: 실랜디 5문제 (0) | 2024.02.04 |
240203: 3Blue1Brown의 manim 사용해보기, 실랜디 3문제 (0) | 2024.02.03 |
240202: 랜디 2 - 상범이의 우울 문제, 하키장 위치 파악 문제. (1) | 2024.02.02 |