728x90
반응형

문제풀이(Problem Solving) 326

백준, BOJ, 1987번, 알파벳 : C++ [CPP] ***

음 백트래킹하면서 DFS로 끝까지 가는 것이라 처음 접했을 때는 어려웠다. https://www.acmicpc.net/problem/1987 #맞는 풀이 ( 백트래킹 + DFS ) #include #include #include #include using namespace std; int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; char arr[20][20]; int alpha[26]; // ASCII 코드 이용하기 'A' = 65 'a'=97 int R,C; //Row(행) , Column(열) int answer = 0; // 최댓값 //현재 위치, 현재까지의 길이 void dfs(int x, int y, int dist){ // 최댓값 갱신 answer = ma..

백준, BOJ, 2468번, 안전 영역 : C++ [CPP] ***

어렵진 않았다. 물 높이에 대해 조건만 만족시켜주면 된다. https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net #맞는 풀이 #include #include #include #include #include #define X first #define Y second using namespace std; int M = INT_MIN; int n; int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; int arr[100][100..

C++에서 STL 함수 중 유용해 보이는 것들

이나 에 다 들어있더라. 1. copy ( ) -> 이터레이터가 지시하는 위치에 복사 1-1. copy_n() -> 해당 이터레이터부터 n개 요소 복사 2. fill ( ) -> 범위에 있는 값을 지시된 값으로 설정 2-1. fill_n ( ) -> n개의 연속적인 원소들을 하나의 값으로 설정 3. unique ( ) -> 범위 내에서 중복된 요소 제거 4. rotate ( ) -> 해당 범위를 왼쪽으로 한 칸 회전 (1,2,3,4) -> (2,3,4,1) 5. lower_bound ( ) -> 하나의 값이 주어지면, 소팅된 범위 내에서 소팅된 순서를 유지를 하면서 그 값이 삽입될 수 있는 위치를 리턴 다시 말하면 범위를 처음부터 탐색하면서 value 이상의 숫자가 처음으로 나오는 위치의 iterator..

프로그래머스, 보석쇼핑 : C++ [CPP]

어렵다. 처음에 생각하기는 어렵지 않은데 효율성 문제가 어렵다. https://programmers.co.kr/learn/courses/30/lessons/67258 효율성이 어렵다 생각나는대로 for문으로 한 번 풀어봤다. #include #include #include #include using namespace std; vector solution(vector gems){ vector answer; vector rank; // 길이 , 시작, 도착 set s(gems.begin(), gems.end()); // gems의 종류를 알기 위함. int size_gem = gems.size(); // 총 탐색해야하는 보석 수 //시작지점 for(int i = 0; i 중복되어도 오류가 생기진 않고 원소는..

C++에서의 문자열 처리(string, regex)

나는 C/C++/C#/Java/Python을 다 맛보고 특히 Python을 깊게 맛봤지만 문자열 처리만큼은 Python이 최고라고 생각했다. 하지만 언어는 찰흙과 같아서 자기가 만드는 대로 만들어진다. 좀 더 잘 뭉개지는 찰흙이라 쉽게 만들어지느냐 딱딱해서 만들기 어렵냐 차이지.. 결국 뭐든 만들 수 있다. 그래서 이번엔 C++에서도 문자열 처리가 가능한데.. 어떤 식으로 해야 유용한가를 탐구해보려고 한다. 알아보자 기본적으로 유용한 라이브러리(정의된)이 많다. 가장 대표적인 2가지 #include // 정규표현식 -> 필터링할 때 무지 많이 쓰인다. #include // 문자열을 다루려면 거의 필수 정규표현식과 문자열 라이브러리다. 우선 string 클래스부터 알아보자. 우선 문자열 클래스를 다루기 위..

프로그래머스, 네트워크 : C++ [CPP]

이것도 생각한지 10분만에 내 머릿속에 있는 생각이 맞았다는 것이 너무 기뻐서 팔짝 뜀 내 생각이 점차 논리적으로 맞아가고 있네 https://programmers.co.kr/learn/courses/30/lessons/43162 #맞는 풀이 #include #include #include using namespace std; int visited[201][201]; // 네트워크를 연결상태 [from][to] 구분하기 위함 bool node[201]; //[노드 방문했는지] int solution(int n, vector computers) { int answer = 0; //모든 노드를 조사해야함 for(int i = 0; i 조사 안했다면 새로운 네트워크임 answer++; // 네트워크 번호를 붙..

프로그래머스, 정수 삼각형 : C++ [CPP]

사실 1로만 테두리가 이루어져있으면 파스칼 삼각형이었던가 이항정리할 때 배운듯한 느낌이 있다 https://programmers.co.kr/learn/courses/30/lessons/43105 #맞은 풀이 #include #include #include using namespace std; int solution(vector triangle) { int answer = 0; int row = triangle.size(); // 삼각형 높이 = 행 숫자; //삼각형 높이가 1이면 작동안함(2번째행부터 항상시작) for(int i = 1; i 해당 행의 원소가 3개 이상일 때만 작동 for(int j=1; j

프로그래머스, 가장 큰 정사각형 찾기 : C++ [CPP]

솔직히 나는 해법을 찾지 못해서 다른 사람 풀이를 찾아왔다. Brute Force에서 케이스를 나누어가며 최대한 줄여봤지만 효율성에서 박살났다. https://programmers.co.kr/learn/courses/30/lessons/12905 #맞는 풀이 #include #include #include using namespace std; //처음부터 생각하진 못함. //효율성 실패때문에 찾아봄. int solution(vector board) { int answer = board[0][0]; // 시작 int r = board.size(); //행 int c = board[0].size();//열 //왼쪽, 왼쪽 위, 위쪽이 존재해야 하기 때문에 //(1,1) 부터(r-1,c-1)까지만 조사하면 된..

프로그래머스, 방문 길이 : C++ [CPP]

재밌어보이길래 한 번 해봤다. 재미있긴 했다. 열거체를 배운김에 써먹었다 https://programmers.co.kr/learn/courses/30/lessons/49994 #맞는 풀이 #include #include using namespace std; enum direction {U,D,L,R}; //0,1,2,3 bool visited[12][12][12][12]; // -5 ~ 5 11개 숫자. 하지만 왼쪽 위가 (0,0)임. //[시작x][시작y][도착x][도착y] int offset = 5; // 맵크기에 비례 int solution(string dirs) { int answer = 0; int arr[2] = {0,0}; // (x,y) arr[0] += offset;//x arr[1] +..

프로그래머스, 스킬트리 : C++ [CPP]

쉽진 않지만 그냥 생각하기 까다롭다는 것? 구현하기는 어렵지 않다는 것 https://programmers.co.kr/learn/courses/30/lessons/49993?language=cpp #맞는 풀이 #include #include using namespace std; int solution(string skill, vector skill_trees) { int answer = 0; //Skil_Tree가 잘 되었는지 하나씩 조사 for(auto x : skill_trees){ string s = ""; //해당 스킬트리에서 순서를 지켜야하는 스킬이 있는지 조사 for(auto y : x){ for(auto a : skill){ if(y == a){ s += a; break; } } } //해당..

728x90
반응형