2024-01-30
오늘은 새벽부터 업다운디펜스 봇을 만들었다.
mySQL로 유저 정보를 관리하고, 디스코드 계정과 Solved.ac 계정을 연동해서 업다운 디펜스를 할 수 있게 만들었다.
배치는 실버 V에서 시작하고, 항상 자신 티어의 문제가 나온다. 문제를 30분안에 풀면 티어가 올라가고, 못 풀면 내려간다.
아래 기능을 어제 5시간만에 모두 구현했다.
/연동 (솔브닥ID) 로 디스코드 계정과 Solved.ac를 연동하고
/프로필 로 내 프로필을 볼 수 있고
/시작 을 하면 자기 티어에 맞는 문제 하나가 뽑히고, 타이머가 시작됩니다 (타이머 공식: 기본 30분, 골드 이상부터 랭크에 따라 5분씩 추가시간)
/종료 로 디펜스를 종료할 수 있고, 크롤링 으로 성공 / 실패 여부는 알아서 처리됩니다.
/중도포기 로 문제 풀이 중간에 포기할 수 있습니다.
/스킵 으로 문제를 넘길 수 있는데, 이건 실제론 사용을 지양하는 편이 좋겠어요
/남은시간 으로 남은 시간을 확인할 수 있습니다.
/순위 로 업다운 티어 순위를 볼 수 있습니다.
티어는 첫 연동에 실버 V부터 시작합니다.
항상 자신의 디펜스 티어에 맞는 + 이미 푼 문제가 아닌 + 푼 사람 수가 100명이 넘는 + 한국어 문제가 나옵니다
디펜스 성공시 티어가 1단계 오르고, 실패시 티어가 1단계 내려갑니다.
/프로필 로 전적을 확인할 수 있습니다
일단 서비스를 베타로 시작했고, 지속적으로 수요가 생기면 계속 기능을 개선해 나갈 것.
살짝 스케치 느낌으로 만든거라서 제대로 할거면 리뉴얼도 필요하다.
오늘은 백준 단계: # 동적 계획법과 최단거리 역추적을 학습할 예정이다.
최단거리 역추적이란 말 그대로 최단 거리 문제를 해결한 후, 실제 경로를 추적하는 과정을 말한다.
오늘의 백준
12852 1로 만들기 2(실버 1)
14002 가장 긴 증가하는 부분 수열 4(골드 4) *미해결
번외 -
4673 셀프 넘버(실버 5)
12852 문제는 바텀업 DP 방식으로 dp[i] 를 i가 1이 되기 위한 최소 연산 횟수로 지정하고, 값을 채워 나가면 되는 문제였다.
특이한건, 경로를 추적하기 위해 아래와 같은 로직을 사용한다는 것.
while (N != 1) {
std::cout << N << " ";
if (N % 2 == 0 && dp[N] == dp[N / 2] + 1)
N /= 2;
else if (N % 3 == 0 && dp[N] == dp[N / 3] + 1)
N /= 3;
else
N--;
}
연산 가중치가 1씩 늘어나니까, memo가 1만큼 차이나는지 비교하면 무엇이 최선의 선택이었는지 확인할 수 있다.
번외로 4673 셀프 넘버 문제를 풀었다.
오늘 만든 업다운 디펜스 봇을 테스트하기 위해 랜디를 돌렸고, 저 문제가 나왔다.
사실 살짝 당황했다. 문제가 잘 이해가 안돼서...
대충 각 자리수 + 자기자신을 더한 값들의 목록을 만들고, 1부터 10000까지 목록에 없는 수를 출력하면 되는 문제었다.
sstream으로 입력된 숫자를 자리수로 쪼개는 방식을 썼는데.. 사실 모듈러를 쓰면 되지 않았나 ..?
14002 가장 긴 증가하는 부분 수열 4(골드 4) 문제는 풀다가 보류했다.
오늘은 너무 늦게까지 (새벽 7시) PS 디펜스 디스코드 봇을 개발하느라 컨디션이 꼬이기도 했고, 왜인지 모르게 문제가 손에 너무 안 잡힌다..
오늘은 이쯤하고 쉬어야겠다.
굳이 힘든데 억지로 공부 할 필요 없다고 생각한다. 빨리 쉬고, 빨리 회복해서. 다시 공부를 시작하자.
최종 평가
최고급 평가사 일론머스크의 분석 및 평가:
오늘의 학습 내용:
- 동적 계획법과 최단거리 역추적 학습
- 백준 문제 12852 (1로 만들기 2) 해결 및 업다운 디펜스 봇 개발
평가 요약:
1. 프로그래밍 실력과 창의적 사고: 업다운 디펜스 봇 개발을 통한 실용적인 프로그래밍 적용 및 창의적인 문제 해결 방식이 인상적입니다.
2. 동적 계획법 적용 능력: 12852 문제를 해결하며 동적 계획법을 활용한 경로 추적 기법을 잘 적용했습니다.
3. 체력 및 컨디션 관리의 중요성: 장시간의 개발 작업 후 피로감을 고려한 학습 조절은 건강한 학습 습관을 보여줍니다.
종합적인 평가:
- 기술적 정확성: 25/30
- 창의적 문제 해결: 25/25
- 건강한 학습 관리: 20/20
- 추가 학습 필요: 20/25
총점: 90/100
추가 조언:
- 프로젝트 개발과 함께 알고리즘 학습을 병행하는 것은 매우 긍정적입니다. 실제 프로젝트에 알고리즘을 적용하는 경험은 실력 향상에 크게 기여합니다.
- 역추적 기법은 동적 계획법에서 중요한 부분입니다. 다양한 문제에 적용해보며 이해를 깊게 하세요.
- 컨디션 관리는 장기적인 학습에 있어 매우 중요합니다. 체력과 정신 건강을 적절히 관리하며 학습 계획을 세우세요.
- 14002 문제는 추후에 다시 도전해보는 것을 추천합니다. 때로는 잠시 물러나는 것이 더 나은 결과를 가져올 수 있습니다.
오늘의 학습은 동적 계획법과 최단거리 역추적에 대한 이해를 보여주었으며, 개발 프로젝트를 통한 실용적인 적용 능력을 보여주었습니다. 또한, 건강한 학습 관리에 대한 중요성을 인식하는 모습도 좋았습니다.
3줄 요약:
1. 업다운 디펜스 봇 개발을 통해 실용적인 프로그래밍 적용과 창의적인 문제 해결 능력을 보여줌.
2. 12852 문제 해결을 통해 동적 계획법과 최단거리 역추적에 대한 이해를 깊게 함.
3. 장시간 개발 작업 후 체력과 컨디션 관리를 통해 건강한 학습 습관을 유지함.
'일일 스터디노트' 카테고리의 다른 글
240201: LCS 역추적, 랜디 시작!! (0) | 2024.02.02 |
---|---|
240131: Binary Search LIS Backtracking, 역추적 알고리즘 (2) | 2024.02.01 |
240129: Two Pointers Algorithm, MITM과 이분 탐색으로 시간복잡도 줄이기 🔥 (0) | 2024.01.29 |
240128: 플로이드-워셜로 최단 거리 사이클 구하기 (0) | 2024.01.29 |
240127: 0-1 BFS, 벨만-포드, 플로이드-와샬 심화 🔥 (0) | 2024.01.27 |