전체 글 95

[Boj] 백준 C++ #12931 두 배 더하기

📍 문제 링크 : https://www.acmicpc.net/problem/12931 📍 알고리즘 분류 : 그리디 📍 문제 풀이반대로 생각하면 된다. 0으로 된 배열 A에서 시작하지 말고, 주어진 배열 B를 0으로 만드는 것이다.로직은 아래와 같다.while(모든 원소가 0일때까지){    for(배열 속 원소들을 하나씩 순회){        홀수일 경우 1을 빼주고, 연산횟수 카운트        0이면 0을 따로 카운트    }    for(배열 속 원소들을 하나씩 순회){        //남은 원소들은 모두 0 아니면 짝수이므로        원소를 2로 나누기    }    연산횟수 카운트++;}  📍 소스 코드#include #include using namespace std;int main..

Boj 2025.02.07

🍊 AWSx제주대 해커톤 참여 후기 | 감귤지도

2025년 1월 20일, 21일에 진행한 NXT Cloud 주관의 AWS x 제주대 해커톤에 참가하였다 학교에서 참여한 AWS 캠프를 통해 NXT Cloud에 대해 알게 되었고, 해당 회사에서 주최하는 제주도 해커톤이 비행기 값을 지원해준다길래 즉흥적으로 직전에 참여하게 되었다. 좋은 경험과 배움이 되었던 이 날의 해커톤을 글로 정리해두고자 한다 :)   출발할 땐 마음이 많이 무거웠다.. 공항을 그런 기분으로 간 것은 처음이다. ㅜㅠ. 공항에 온 사람들은 다들 들떠있어보이는데 나는 또 밤을 샐 생각에 ..🥲 (그 전날에도 해커톤을 했다)    해커톤 진행 장소인 제주대학교에 도착했다. 해커톤 개발 시작 전, 클라우드 사전 교육도 받았다.   이번 해커톤의 주제는 '제주도 산업 육성 및 활성화' 였다...

카테고리 없음 2025.01.31

[Boj] 백준 C++ #16948 데스 나이트

📍 문제 링크 : https://www.acmicpc.net/problem/16948 📍 알고리즘 분류 : BFS 📍 문제 풀이이 문제는 큐를 이용해서 BFS로 해결할 수 있다. (r,c)의 위치에서 이동할 수 있는 칸은 아래 그림과 같이 총 6개이다. 따라서 한 위치에 대해 이동할 수 있는 6개의 위치를 모두 탐색해주면 된다.체스판을 넘어가거나, 이미 방문한 위치가 아니면 큐에 넣어준다.이미 방문했다면, 지금 방문한 것은 최단 횟수의 방문이 아니라는 것이므로 고려해줄 필요가 없다. 모든 지점은 처음으로 방문했을 때가 최단 횟수의 방문이다. 위 과정을 큐가 빌 때까지, 혹은 목표 지점에 도달할 때까지 반복한다. 이 문제의 핵심 로직은 모든 지점은 처음으로 방문했을 때가 최단 횟수의 방문이라는 것이다..

Boj 2025.01.07

[Boj] 백준 C++ #2138 전구와 스위치

📍 문제 링크 : https://www.acmicpc.net/problem/2138 📍 알고리즘 분류 : 그리디 알고리즘 📍 문제 풀이 신기한 점이 어떤 전구를 먼저 켜고 끄든, 순서가 중요하지 않다는 것이다!따라서 우리는 첫 번째 전구부터 순서대로 탐색하면 된다. 그리디하게. 현재에 최적이 되도록.첫 번째 전구를 목표 상태와 비교하고 다르다면 전구의 상태를 바꾸고, 같다면 그냥 두면 된다. 그런데 전구는 자신의 왼쪽, 자신, 자신의 오른쪽 이렇게 3개의 전구의 상태에 영향을 미치게 되는데그리디하게 접근할 경우 이 조건이 훨씬 쉽게 만들어진다. 현재 보고 있는 i번째 전구를 변경하고자 할 경우 할 수 있는 것은 i+1번째 전구를 누르는 것이라는 것이다! i-1번째 전구나 i번째 전구를 누르면 안되는..

Boj 2025.01.05

[Boj] C++ #1339 단어 수학

📍 문제 링크https://www.acmicpc.net/problem/1339 📍 알고리즘 분류그리디 📍 문제 풀이직관적으로 높은 자리에 큰 수가 와야된다는 것을 파악할 수 있다. 그런데 단어가 하나가 아니기 때문에, 어떤 단어에서는 높은 자리수의 알파벳이 다른 단어에서는 가장 낮은 자리수에 위치해있을 수도 있다. 따라서 모든 단어를 종합하여 판단해야 한다. ABC와 CADB가 주어졌다고 해보자.단어 수의 합은 (100*A + 10*B + C) + (1000*C + 100*A + 10*D + B) = (1000*C + 200A + 11B + C)가 될 것이다.이게 최대가 되기 위해서는 가장 큰 수를 곱하는 알파벳부터 9, 8, 7, 6, .. 순서대로 바꿔주면 된다.따라서 C = 9, A = 8, ..

Boj 2025.01.04

[Flutter] Stateful 위젯이 두 개의 클래스로 나눠진 이유

Flutter 앱을 구성하는 위젯은 Stateful 위젯과 Stateless 위젯으로 구분할 수 있다. 이렇게 구분하는 이유는 효율적인 상태 갱신을 위해서이다. 예를 들어 도움말 페이지는 사용자에 의해 화면이 바뀔 내용이 거의 없이 정적으로 화면을 보여주면 된다. 이런 경우 StatelessWidget 클래스를 상속받아서 위젯을 만든다. 하지만 마이페이지에서 이름을 변경하면 변경된 이름으로 화면이 갱신되어야 할 것이다. 이런 경우 StatefulWiddget을 상속받아서 만든다. 앱이 위젯의 상태를 감시하고 있다가 위젯이 특정 상태가 되면 알맞은 처리를 수행해야 한다. 상태가 연결된 동적인 위젯이 StatefulWidget이다. Stateful 위젯은 계속 상태를 지켜봐야하므로 그만큼 메모리나 CPU 등..

Flutter 2024.12.27

[Boj] 백준 C++ #1202 보석 도둑

📍문제 링크https://www.acmicpc.net/problem/1202 📍알고리즘 분류그리디, 우선순위 큐 📍 풀이 방법최대한 많은 보석을 훔치기 위해서는 최대한 비싼 보석을, 많이 담아야 한다.따라서 비싼 보석부터 담아야 하는데, 최대로 용량을 채울 수 있는 가방에 넣어야 한다.반복문을 통해 가방을 하나씩 그리디하게 보면서 넣을 보석을 정해준다.우선순위 큐를 이용해서 하나의 가방 안에 들어갈 수 있는 무게의 보석들 중 가격이 가장 비싼 것을 담으면 된다. 어떤 가방부터 보아야할까?용량이 큰 가방부터 본다면, 비싼데 크기가 작은 보석이 용량이 큰 가방에 담길 것이다. 더 보석을 가져갈 수 있을텐데 용량이 낭비될 것이다.따라서 용량이 작은 가방부터 탐색한다. 작은 가방에 담기는 무게 중에서 비싼..

Boj 2024.12.27