목록코딩테스트 (120)
Deff_Dev
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 이 문제는 다음달에 선물을 가장 많이 받는 사람의 선물 갯수를 구하는 문제이다. 다음달에 선물을 받는 조건 이번 달에 본인이 상대방보다 선물을 많이 주었을 때 이번 달에 선물을 주고 받은 갯수가 같고 선물 지수가 높을 때 선물을 준 갯수 - 선물을 받은 갯수 = 선물 지수 해당 문제는 맵을 사용하면 비교적 쉽게 해결할 수 있지만, 맵을 생각하지 못해 문제를 해결하지 못하고 블로그를 참고하여 풀이했습니다. 풀이 사람 별 번호를 맵에 저장하고 선물 지수와 선물 지표를 구한다. 각 사람 별로 다음 달에 받는 ..
2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 문제 이 문제는 0과 1로 이루어진 미로에서 0은 벽을 나타내고, 1은 길을 나타낸다. 출발점은 (1, 1)이고 도착점은 (N, M)일 때, 출발점부터 도착점까지의 최소 칸 수를 출력하는 문제이다. DFS로 이 문제를 풀려고 시도했지만 해결하지 못하여 블로그의 풀이를 참고하여 BFS로 문제를 해결했습니다. DFS로 이 문제를 풀 경우, 연산이 많아져 시간초과가 나온다고 한다. 풀이 BFS를 이용하여 상하좌우로 탐색하고 목적지에 도달했을 경우 이동 거리를 출력하는 방법으로 풀이했다. #inclu..
9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 문제 이 문제는 입력한 문자열에서 모든 괄호가 완성되면 "YES"를, 완성되지 못한다면 "NO"를 출력하는 문제이다. 스택의 top에 "("가 있고 푸시할 문자가 ")"일 때 pop을 하고, 그 이외의 경우에는 push한 뒤, 스택이 비어 있다면 "YES", 스택이 채워져 있다면 "NO"를 출력하는 방법으로 문제를 풀이했다. 풀이 #include #include #include using namespace std; int main(..
11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 문제 이 문제는 여러 사람이 ATM에서 돈을 인출하는 데 걸리는 시간의 최솟값을 출력하는 문제이다. 최솟값이 될려면 오름차순으로 정렬한 뒤 처음부터 끝까지 더하면 된다. 풀이 #include #include #include // https://www.acmicpc.net/problem/11399 11399번 ATM using namespace std; int n; vector line; void ATM() { sort(line.begin(), line.end()); // 정렬 int resul..
1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 문제 이 문제는 BFS를 사용하여 각 위치별 이동 시간을 계산한 후, 동생이 있는 위치에 도달할 때까지의 이동 시간을 출력하는 방법으로 풀이하면 된다. 풀이 #include #include // https://www.acmicpc.net/problem/1697 1697번 숨바꼭질 using namespace std; bool visited[100001] = { false , }; int result[100001] = { 0 , }; /..
1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 이 문제는 DFS와 BFS를 처음 공부하기에 가장 좋은 문제 중 하나다. 입력한 간선을 토대로 양방향 그래프를 만들고 시작 지점부터 DFS, BFS를 이용해 탐색하면 된다. 풀이 #include #include // https://www.acmicpc.net/problem/1260 DFS와 BFS using namespace std; int map[1001][1001] = {0, }; // 맵 bool visited[1..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 이 문제는 상대 팀 진영까지의 최단 거리를 구하는 문제로, 만약 상대 진영으로 가는 길이 없다면 -1을 반환한다. BFS를 사용하여 시작 지점부터 각 위치까지의 이동 거리를 계산하고, 상대 진영 위치에 저장된 값을 반환하면 문제를 쉽게 해결할 수 있다. 풀이 BFS를 사용하여 각 위치마다 이동 거리를 계산하여 결과를 result 배열에 저장하고, 상대 진영 위치의 result 배열 값을 반환하는 방법으로 풀이했다. #include #include using namespace std; // 방향 int d..
1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 문제 이 문제는 입력한 문자열에서 공백을 기준으로 단어의 갯수를 출력하는 문제이다. 여기서 주목해야될 점은 공백을 문자열에 넣어야 한다는 점이다. cin으로 문자열 입력을 받는다면 공백은 입력되지 않기 때문에 getline을 사용하여 입력을 받아야한다. 2가지 방법으로 문제를 풀었다. for문을 이용해 공백을 찾아 단어 갯수를 세는 방법 stringstream을 이용해 문자열을 탐색해 단어 갯수를 세는 방법 풀이 1 문자열 길이 만큼 반복문을 돌려 공백을 ..