목록알고리즘 (29)
어읽로꾸거
백준 링크 https://www.acmicpc.net/problem/16785 16785번: ソーシャルゲーム JOI 君が少なくとも C 枚のコインを得るためにログインしなければならない回数の最小値を出力せよ. www.acmicpc.net 문제 해석(?) JOI는 내일부터 새롭게 소셜 게임을 시작하기로 했다. 이 소셜 게임에는 하루에 한번만 로그인을 할 수가 있다. 로그인을 할때마다 A개의 코인을 얻을 수 있다. 그리고 월요일부터 일요일까지 7일 연속으로 로그인을 하면, 그때마다, 추가로 B개의 코인을 얻을 수 있다. 이거 이외의 수단으로 코인을 얻는 수단은 없다. 내일은 월요일이다. JOI가 최소 C개의 코인을 얻기 위해 해야하는 로그인 회수의 최소치를 구하시오. 입력은 이하의 형태로 표준입력에게서 주어진다. J..
백준 5397 링크 https://www.acmicpc.net/problem/5397 풀이 방법 스택 2개를 구성하여 왼쪽 스택, 오른쪽 스택을 구성합니다 한 글자씩 입력을 받아 왼쪽 스택에 넣어주고, 방향이나 백 스페이스 기호는 따로 처리하여 줍니다. 1. '' 의 경우엔 오른쪽의 스택에서 빼서 왼쪽의 스택에 넣어줍니다. 3. '-' 의 경우엔 왼쪽의 스택에서 하나 빼줍니다. 입력이 끝나면 왼쪽의 스택에서 모두 빼서 오른쪽에 넣어줍니다. 그리고 오른쪽에서 하나씩 빼면서 출력해주면 끝! 😎 Linked List를 이용한 풀이 : https://chika.tk/14 코드 #include #include using namespace std; int main() { //freopen("input.txt", "..
백준 5558 링크 https://www.acmicpc.net/problem/5558 문제 해석(클릭?) 문제 올해도 JOI구역에서 치즈 공장이 생산을 시작해, 쥐들이 집에서 얼굴을 내밀었다. JOI구역은 동서남북으로 구역이 정리되어있고, 각 구역은 쥐집, 치즈공장, 장애물, 빈땅으로 정리할 수 있다. 쥐들은 집에서 출발하여 모든 치즈공장을 방문하여 치즈를 하나씩 먹는다. 이 구역에는 N개의 치즈공장이 있고, 치즈를 하나 먹을 때마다 체력이 1씩 오른다. 다만, 쥐는 자신의 체력보다 단단한 치즈를 먹을 수는 없다. 쥐는 동서남북으로 이웃해있는 구획에 1분걸려 이동할수 있으나, 장애물이 있는 구역에는 들어갈 수 없다. 치즈공장에서 치즈를 먹지 않고 지나가는 것도 가능하다. 모든 치즈를 먹는데 걸리는 최단시..
백준링크 https://www.acmicpc.net/problem/2975 풀이 🙄 코드 #include using namespace std; int main() { freopen("input.txt", "r", stdin); int account, change, result; char task; while (1) { cin >> account >> task >> change; if (account == 0 && change == 0 && task == 'W') break; if (task == 'W') result = account - change; if (task == 'D') result = account + change; if (result < -200)..
백준 링크 https://www.acmicpc.net/problem/4287 풀이 각 자리마다 몇개 차이나는지 구하고, 출력하면 됩니다. 🤪 코드 #include #include using namespace std; int diff(int a, int b) { //몇개 차이나는지 구함 if (b - a >= 0) return b - a; else return 26 - (a - b); } char change(char c, int n) { //바꿔줌 if (n == 0) return c; else { if (c == 'z') return change('a', n - 1); else return change(c + 1, n - 1); } } int main() { freopen("input.txt", "r"..
백준 2504 링크 https://www.acmicpc.net/problem/2504 풀이 과정 이 문제는 크게 두 부분으로 나눠서 풀었습니다. 한 부분은 주어진 괄호가 올바른 괄호인지를 판단하는 부분입니다. 스택을 이용하여 판단할 수 있습니다. 만약 괄호가 올바르지 않다면 바로 '0'을 출력하지만 올바르다면 다음 부분으로 넘어갑니다. 만약 괄호가 올바르다면 괄호의 값을 구하면 됩니다. 괄호의 값을 구하는 방법은 다음과 같습니다. 1. 둘러 싸일때 마다 발생하는 값을 저장하는 배열을 생성한다. ex) int ar[20]; ( ) 이면 한번 둘러싸였으므로 ar[1]에 발생하는 값을 저장하면 되고 ([( )]) 이면 3번 둘러싸였으므로 ar[3]에 저장해주면 됩니다. 주어지는 괄호들이 최대 30개 이므로 둘..
백준 16118 링크 https://www.acmicpc.net/problem/16118 정말 어렵게 풀었습니다 😣 대략 이 문제를 접한지 2~3주 만에 풀었습니다. 처음엔 금방 풀 수 있을줄 알았는데 그게 아니었습니다. 여러 사람들에게 물어보고 또 질문하고, 다시 한번 물어보고(이해가 안되서 물어봄), 생각해보고. 그러던 끝에, 해답을 알게 되었습니다. 이제와서 생각해보니 크게 어려운건 아닌거같기도 하고 🙄 처음에 접근한 방법 다익스트라 문제인건 알겠는데 어떻게 해결하지? 아하, 여우와 늑대가 다익스트라 하는것을 각각 따로 만들어서 해주면 되겠지. 그냥 여우 거리 배열(dp_f[]),늑대 거리 배열(dp_w[]) 만들어서 하면 될꺼야. 그러면 처음엔 느리다가 나중에 빨라지는 경우를 구할 수 가 없게 됩..
백준 16469 링크 https://www.acmicpc.net/problem/16469 해결 과정 45분정도 걸려서 구상하고 예제에서 걸린거 해결후 한번에 통과! 😎 우선 악당들 3명의 위치를 입력받고 바로 {y위치, x위치, 악당번호} 를 매개로 큐에 넣어준다. 그리고 3개의 각각의 악당 방문배열을 만들어 bfs로 돌아다닐때마다 언제(몇 턴) 도착했는지 기록한다. 큐에서 다 탐색한 후 다시 탐색을 돌며 방문배열 3개를 비교하여 3명 다 방문했는지, 해당 칸의 최소값이 몇인지를 구하여 답과 비교 한다. 코드 #include #include using namespace std; typedef struct pack{ int y, x, who; }; int y[] = { 0,0,1,-1 }; int x[] ..