프로그래머스(Programmers)
-
프로그래머스 프렌즈4블록 C++프로그래머스(Programmers) 2022. 7. 14. 23:43
위 초기 배치를 문자로 표시하면 아래와 같다. TTTANT RRFACC RRRFCC TRRRAA TTMMMF TMMTTJ 각 문자는 라이언(R), 무지(M), 어피치(A), 프로도(F), 네오(N), 튜브(T), 제이지(J), 콘(C)을 의미한다 입력으로 블록의 첫 배치가 주어졌을 때, 지워지는 블록은 모두 몇 개인지 판단하는 프로그램을 제작하라. 입력 형식 입력으로 판의 높이 m, 폭 n과 판의 배치 정보 board가 들어온다. 2 ≦ n, m ≦ 30 board는 길이 n인 문자열 m개의 배열로 주어진다. 블록을 나타내는 문자는 대문자 A에서 Z가 사용된다. 출력 형식 입력으로 주어진 판 정보를 가지고 몇 개의 블록이 지워질지 출력하라. 입출력 예제 mnboardanswer 4 5 ["CCBDE", ..
-
프로그래머스 교점에 별 만들기 C++프로그래머스(Programmers) 2022. 7. 13. 00:18
이때, 모든 교점의 좌표는 (4, 1), (4, -4), (-4, -4), (-4, 1), (0, 4), (1.5, 1.0), (2.1, -0.19), (0, -1.5), (-2.1, -0.19), (-1.5, 1.0)입니다. 이 중 정수로만 표현되는 좌표는 (4, 1), (4, -4), (-4, -4), (-4, 1), (0, 4)입니다. 만약 정수로 표현되는 교점에 별을 그리면 다음과 같습니다. 위의 그림을 문자열로 나타낼 때, 별이 그려진 부분은 *, 빈 공간(격자선이 교차하는 지점)은 .으로 표현하면 다음과 같습니다. "..........." ".....*....." "..........." "..........." ".*.......*." "..........." "..........." "....
-
프로그래머스 2 x n 타일링프로그래머스(Programmers) 2022. 7. 7. 23:35
=> DP 문제입니다. => 점화식을 세울 줄 아는지에 대해 묻는 문제였습니다. => 위에서부터 아래로 CASE를 나누며 점화식을 만들어낼 수 있는지 확인하는 문제입니다. => 혹은, F(n)의 값들을 써보며 규칙성을 찾아 문제를 풀이할 수도 있습니다. => 해당 문제는 피보나치수열과 같은 문제였습니다. => 풀이는 아래에 첨부하였습니다. #include #include #include #include using namespace std; int solution(int n) { vector answer; answer.push_back(0); answer.push_back(1); answer.push_back(2); if((n==1) || (n==2)) { return answer[n]; } for(int..
-
프로그래머스 배달 C++프로그래머스(Programmers) 2022. 7. 1. 14:17
제한사항 마을의 개수 N은 1 이상 50 이하의 자연수입니다. road의 길이(도로 정보의 개수)는 1 이상 2,000 이하입니다. road의 각 원소는 마을을 연결하고 있는 각 도로의 정보를 나타냅니다. road는 길이가 3인 배열이며, 순서대로 (a, b, c)를 나타냅니다. a, b(1 ≤ a, b ≤ N, a != b)는 도로가 연결하는 두 마을의 번호이며, c(1 ≤ c ≤ 10,000, c는 자연수)는 도로를 지나는데 걸리는 시간입니다. 두 마을 a, b를 연결하는 도로는 여러 개가 있을 수 있습니다. 한 도로의 정보가 여러 번 중복해서 주어지지 않습니다. K는 음식 배달이 가능한 시간을 나타내며, 1 이상 500,000 이하입니다. 임의의 두 마을간에 항상 이동 가능한 경로가 존재합니다. 1..
-
프로그래머스 피로도 C++프로그래머스(Programmers) 2022. 5. 24. 23:25
입출력 예 k dungeons result 80 [[80,20],[50,40],[30,10]] 3 => 처음에는 DFS 혹은 BFS로 풀어야 하는 문제라고 생각했습니다. => 하지만 제한사항을 보면, dungeons의 길이는 최대 8개입니다. => 완전탐색을 해도 되는 조건이므로 완전 탐색을 시행하였습니다. => 헤더에 포함되어있는 next_permutation함수를 이용하였습니다. https://codingham.tistory.com/262 순열과 조합의 차이 순열 순서가 있는 조합 (중복 허용X) => 순서가 있으므로, 중복을 허용하지 않습니다. ex) A B C 가 있을 때 이 세명을 세울 수 있는 방법의 개수를 구하시오. => (A B C) (A C B) (B A C) (B C A) (C A B)..
-
괄호 회전하기프로그래머스(Programmers) 2022. 5. 18. 23:50
제한사항 s의 길이는 1 이상 1,000 이하입니다. 입출력 예 sresult "[](){}" 3 "}]()[{" 2 "[)(]" 0 "}}}" 0 입출력 예 설명 입출력 예 #1 다음 표는 "[](){}" 를 회전시킨 모습을 나타낸 것입니다. xs를 왼쪽으로 x칸만큼 회전올바른 괄호 문자열? 0 "[](){}" O 1 "](){}[" X 2 "(){}[]" O 3 "){}[](" X 4 "{}[]()" O 5 "}[](){" X 올바른 괄호 문자열이 되는 x가 3개이므로, 3을 return 해야 합니다. 입출력 예 #2 다음 표는 "}]()[{" 를 회전시킨 모습을 나타낸 것입니다. xs를 왼쪽으로 x칸만큼 회전올바른 괄호 문자열? 0 "}]()[{" X 1 "]()[{}" X 2 "()[{}]" O ..
-
프로그래머스 가장 먼 노드 C++프로그래머스(Programmers) 2022. 5. 17. 22:42
=> BFS를 사용해 각 노드로 가는 거리들을 구합니다. => 내가 지금 갈 노드 = 이전 노드 + 1; => 가장 멀리 있는 노드값을 answer에 반환합니다. #include #include #include #include using namespace std; int solution(int n, vector edge) { int answer = 0; vector graph(n+1); for(auto ed : edge) { int from = ed[0]; int to = ed[1]; graph[from].push_back(to); graph[to].push_back(from); } vector dist(n+1, -1); queue q; dist[1] = 0; q.push(1); int max =0; w..