[C++] 백준 1445번 : 일요일 아침의 데이트
·
problem solving/백준
🔗 문제 https://www.acmicpc.net/problem/1445 ✏️ 풀이문제를 잘 읽어야 하므로 특. 별. 히 캡처를 해왔습니다. 저는 노란 부분만 잘 읽으면 된다고 생각하고 난이도도 골4라고 생각됩니다.  구현 문제는 정리를 하고 풉니다.  [나는 무엇을 구현해야하는가?]2차원 배열에서 출발지가 주어지고 '쓰레기칸', '쓰레기인접칸'을 최소로 밟고 목적지까지 도달하는 것.출발지와 목적지가 주어져있고, 재방문 여부와 상관없이 가중치만 최소로 해야 한다. -> 다익스트라 이렇게 차분히 생각하면 알고리즘을 특정할 수 있고 문제가 쉬워집니다.  [조금의 최적화]특정 위치가 쓰레기 인접칸인지 확인하려고 매번 4방 탐색을 한다?같은 칸을 여러 번 방문하는 다익스트라 특성상 비효율적입니다. 쓰레기위치..
[C++] 백준 13549번: 숨바꼭질3
·
problem solving/백준
🔗 문제https://www.acmicpc.net/problem/13549  ✏️ 풀이 [알고리즘]다익스트라 X*2로 이동할 경우는 가중치가 0이기 때문에 나이브하게 BFS로 풀면 안 된다.이 경우는 다익스트라로 접근하여 최소 가중치를 찾아주는 방식을 떠올려서 풀면 된다.  [시간 최적화 방법]수빈이가 동생보다 앞에 있다면 뒤로 한 칸씩 이동해줄 수밖에 없다.수빈이가 동생과 같은 위치라면 연산이 필요 없다.if(N >= K) cout  💾  소스#include #include #include #include using namespace std;typedef pair pii;const int MAX_N = 200000 + 1;int N, K;int getAnswer(){ priority_que..
[C++] 백준 10159번: 저울
·
problem solving/백준
🔗 문제https://www.acmicpc.net/problem/10159  ✏️ 풀이N개의 정점 (N ≤ 100)M번의 대소 비교처음에는 대소 관계 위상정렬인가 싶었다.하지만 문제는 i번째 아이템이 다른 아이템의 순서를 파악하지 못 하는 수를 출력해줘야 한다. 대소 관계가 주어졌다는 건 그래프 관계로 만들 수 있다는 것이고, 순서를 파악하지 못 한다는건 분리된 그래프라는거 아닐까? 라는 생각으로 dfs랑 플로이드워셜 알고리즘을 생각했다. dfs는 내가 잘 못 하니까 플로이드 워셜 알고리즘으로 풀었다 🙂 플로이드 워셜 문제는 주로 정점이 500개 이하일때 권장되는 풀이이므로 바로 적용해서 풀었다. 플로이드 워셜 시간복잡도 : `O(V^3)`모든 정점 쌍에 대한 최단 경로를 계산하느라 3중 포문을 돌기..
[SWEA/D3] 1230. [S/W 문제해결 기본] 8일차 - 암호문3
·
problem solving/SWEA
🔗 문제SW Expert Academy SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com  🖍 풀이양방향 리스트를 지원하는 컨테이너 list 를 활용해서 풀어도 된다. 기존 암호문: list의 뒤에 데이터를 연달아 삽입한다.새 암호문: list는 임의 위치 엑세스가 불가하다는 특징이 있다. 그래서 string이나 vector처럼 container[i+x]가 불가능하다. 대신 반복자 iter를 사용해주었다. list의 begin()부터 x번 반복자를 이동시켜야 삽입할 위치를 iter에 저장한다. 그리고 나서 insert(삽입 위치, 데이터)하여 새 암호문을 넣어준다.이 때, 명령문마다 삽입할 위치 (x)가 다르므로..
[SWEA/D3] 10726 이진수 표현
·
problem solving/SWEA
🔗 문제SW Expert Academy SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com ✏️ 풀이문제에서 대놓고 비트마스크라고 힌트를 주어서 어렵지 않은 문제지만 생각해보지 못한 풀이 방법을 배워서 풀이를 남긴다. 일단 문제를 읽자. (위 사이트 참고) M이 최대 10^8승 (1억)이므로 배열로 순회하면 C++ 기준 1000ms 이내에 제출해야 하는데 바로 시간초과행이다 🙂그에 비해 N은 최대 30이므로 절대 시간초과가 안 걸릴 줄 알았는데 시간초과에 걸렸다.테스트케이스가 1만개 중에 9883개를 맞추길래 부랴부랴 FAST IO를 적용해서 맞출 수 있었다. FAST IO를 습관화 하자.1000ms를 못 넘겨서 ..
[C++] 백준 1236번: 성 지키기 (비트 마스크)
·
problem solving/백준
🔗 문제https://www.acmicpc.net/problem/1236  ✏️ 풀이풀이는 간단하다.각 행과 열에서 X 경비원이 없는 곳의 개수를 세면 된다.그리고 그 개수 중 큰 것이 답이 된다.  예제 2를 보자. 정답은 3이다.행에서는 X가 없는 곳이 3 줄열에서는 X가 없는 곳이 1 줄5 8....XXXX........XX.X.XX................. 배열로 확인하면 되지만 비트마스킹으로 푼 것에 의의를 두었다.안 쓰면 까먹게 되는 지식들.. 다시 한 번 정리하며 풀이 소스를 올린다. 비트 설정 (set)int number = 0b0000; // 초기 값int mask = 0b0001; // 1을 설정할 마스크number |= mask; // number는 이제 0001 ..
[C++ | JAVA] 백준 2623번: 음악프로그램
·
problem solving/백준
🔗 문제2623번: 음악프로그램  ✏️ 풀이 문제에 알고리즘 힌트가 대놓고 있다.아래의 문장을 읽어보자.이제 여러분이 해야 할 일은 보조 PD들이 가져 온 순서들을 보고 남일이가 가수 출연 순서를 정할 수 있도록 도와 주는 일이다. 답이 여럿일 경우에는 아무거나 하나를 출력 한다. -> 여러 답이 나올 수 있는 위상정렬의 특징  위상 정렬이라는 문제 유형을 파악했기 때문에 문제를 바로 풀 수 있었다.위상 정렬이란 선후관계를 고려하여 여러 원소의 하나의 줄로 쭉 줄세울 수 있는 알고리즘이다.우선순위가 똑같은 원소가 있다면 순서가 상관 없으니 답도 여러개 일수도 있다.  구현 방법은 선후 관계를 고려하는 것 부터 시작된다.a → b 의 간선 관계라면 a는 선, b는 후며 b 입장에서는 a가 진입하므로 아래..
[C++] 백준 23031번: 으어어… 에이쁠 주세요..
·
problem solving/백준
🔗 문제https://www.acmicpc.net/problem/23031  밤이 되면 어두워지는 다솔관에는 좀비가 나온다는 괴담이 있다. 그 좀비들의 정체는 바로 시험 기간에 공부하느라 지친 학생들이었다. 지친 학생들은 멀리서 보면 흡사 좀비이므로 학생 좀비라고 부르자. 아리는 낮에 공부하다가 깜빡하고 책을 두고 와서 밤에 다시 다솔관 4층으로 가야 한다. 밤에 다솔관 4층에 도착한 아리는 겁이 많아서 학생 좀비들을 마주친다면 기절해버리고 말 것이다. 아리는 기절 하지 않고 무사히 책을 찾아 돌아가고 싶다. N × N으로 이루어진 다솔관 4층 곳곳에는 형광등 스위치와 학생 좀비들이 있다. 아리는 가장 왼쪽 위인 (1, 1)에서 출발하고 아리와 학생 좀비들은 모두 아래 방향을 보고 있다. 아리는 주어진..
[C++] 백준 8913번 : 문자열 뽑기
·
problem solving/백준
🔗 문제https://www.acmicpc.net/problem/8913  ✏️ 풀이  [문제 분석] 주어지는 문자의 타입은 2개 밖에 없다.문자를 뽑을 수 있는 조건은 문자의 연속된 개수다.-> 문자가 얼마나 연속되었는지 이 숫자를 이용할 수 있는 방법을 강구하자!! [아이디어] 나의 아이디어가 아닌.. ys님에게 받은 아이디어같은 타입의 문자열을 그룹화하자! 그 그룹에 포함된 요소의 개수가 연속된 문자의 개수다. 이 값 활용해 우리에게 친숙한 숫자로 바꾸어 배열로 저장하자.  이건 어차피 문자의 타입이 2개기 때문에 할 수 있는 방법이다.aaabbaa == {3, 2, 2}abab == {1, 1, 1, 1}  [구현] 위 아이디어를 구현할 수 있는지 검토해보자.문자열을 문자의 연속된 수로 변환하자..
[C++] 백준 1938번 : 통나무 옮기기
·
problem solving/백준
🔗 문제https://www.acmicpc.net/problem/1938 ✏️ 풀이 문제에 나와 있는 배열을 보면 뭔가 막막한 감정이 들게 한다.. 하지만 쫄지 않으면 무조건 풀 수 있다!    문제를 읽으며 "가중치가 없는 최단 경로"구하기라는 것을 알았고 BFS로 알고리즘을 특정했다.BFS의 재방문 방지를 위한 유니크한 값이 필요하다. 그래서 통나무가 차지하는 3칸 중 하나의 위치를 기준으로 잡아주었다.나는 중간에 있는 위치를 기준으로 잡았다.회전을 할 때 중심을 기준으로 8방 탐색을 하면 쉽기 떄문이다!그리고 재방문체크는 3차원 배열을 이용해준다.bool visited[가로니?][x][y]같은 좌표라고 하더라도 통나무의 방향이 (가로)인지 (세로)인지에 따라서 갈 수 있는 방향이 달라지기 때문에 ..