728x90
반응형

문제풀이(Problem Solving) 326

프로그래머스, 압축, C++ [CPP] ★★★★

https://school.programmers.co.kr/learn/courses/30/lessons/17684 문자열 가지고 노는 문제다. substr을 유용하게 쓸 수 있는 문제다. 그냥 따라서 구현하면 된다. #맞은 풀이 #include #include #include using namespace std; map alpha; vector solution(string msg) { vector answer; int idx = 27; alpha["A"]=1; alpha["B"]=2; alpha["C"]=3; alpha["D"]=4; alpha["E"]=5; alpha["F"]=6; alpha["G"]=7; alpha["H"]=8; alpha["I"]=9; alpha["J"]=10; alpha["K"]=..

프로그래머스, 후보키, C++ [CPP] ★★★★★

https://school.programmers.co.kr/learn/courses/30/lessons/42890 나는.. 어려웠다. 그래서 다른 사람풀이를 보고 이해했다. 비트마스크를 써서 비교를 하는 것도 처음엔 생각하지 못했고 유일성이나 최소성에 관한 구현도 조금 힘들었다. 그래도 주석을 달면서 비트마스킹에 대한 감을 잡았다. #맞은 풀이 #include #include #include #include #include #include using namespace std; // 최소성 확인 bool possi(vector vec,int now){ //지금까지 유일성이 확인된 vec 컨테이너의 원소들에 대해서 //now가 최소성을 가지는지 확인 for(int i = 0; i < vec.size(); i..

프로그래머스, 오픈채팅방, C++ [CPP] ★★★★

https://school.programmers.co.kr/learn/courses/30/lessons/42888 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아주 좋은 문제라고 볼 수 있다. 문자열 처리를 함과 동시에 구현 문제이다. 감이 오면 쉽지만.. 어떻게 할지 모른다면 못푼다..ㅠ 내 생각의 흐름을 보여주자면 결국 uid에 해당하는 마지막 변경 닉네임만이 중요하다. 문제의 출력도 실시간이 아닌 마지막, 모두 다 처리했을 때를 물어본다. 이것이 핵심이라고 할 수 있다. 그리고 stringstream을 쓰는 것도 핵심이다. 문자열 처리에 정말 도움..

백준, BOJ, 2492번, 보석C++ [CPP] ★★★★

음.. 나올법한 문제지만.. 바로 생각나지 않았다. 이건 두고두고 볼만하긴 한 문제라고 생각한다. 어려웠다. https://www.acmicpc.net/problem/2492 다음에 한 번 더 풀어야 겠다. #맞은 풀이 #include using namespace std; int N,M,T,K; int main(){ cin >> N >> M >> T >> K; vector jewel; for(int i = 0; i> x >> y; jewel.push_back({x,y}); } int ansX,ansY; int ans = 0; //최적 사각형을 만드는 방법은 테두리에 보석이 포함될 때다. //즉, 사각형을 만들었을 때 보석이 변 위에 존재해야 한다. //(x1,y1) (x2,y2) 라는 보석이 있을 때, ..

백준, BOJ, 1826번, 연료 채우기C++ [CPP] ★★★★★

이것은 그냥 생각했을 때.. 단순한 문제지만 시간을 단축하려면 조금 더 머리가 필요한 문제였다. 중요한 문제라고 생각한다. 우선순위 큐라면 이 문제가 가장 대표적이라고 생각한다. 나는 시간초과나서 실패했다. 그리고 다시 답을 찾게되었다. https://www.acmicpc.net/problem/1826 #시간 초과 풀이 #include using namespace std; //해당 위치의 값이 0이 아니면 주유소의 위치이며 값은 기름의 양임 int stations[1000001]; //이렇게 하면.. 시간 초과남, 답은 나올지 모르겠으나 풀이는 아님 int N; int ans = 123456789; int l,p; //도착위치, 초기 기름양 void func(int pos, int cnt, int fue..

백준, BOJ, 12869번, 뮤탈리스크 C++ [CPP] ★★★★

DFS + DP 문제다. 나는.. DP를 까먹고 있어서 답을 결국 봐버렸다.ㅠㅠ 어쩐지.. 이 문제는 중요해보였다. 아니 우선 나에게 통찰력을 주었다. https://www.acmicpc.net/submit/12869/48753292 #맞은 풀이 #include using namespace std; //재귀만 해보려는데 도저히 생각이 안나서...답을 찾았다. int dp[61][61][61]; //DP를 사용하라는데.. 재귀 + DP란다. //scv 체력 a,b,c에 대해서 각 공격을 적용해본다. int func(int a, int b, int c){ //죽은 scv에 대해서는 연산하지 않는다. //이 처리를 하는 이유는 음수에 대한 계산을 하지 않기 때문이다. if(a> N; //배열 모두 초기화 me..

백준, BOJ, 4485번, 녹색 옷 입은 애가 젤다지? C++ [CPP] ★★★★

BFS + DP 문제다. 사실 DP란 것은 아니고.. 그냥 상태 저장문제라고 보면 된다. 즉, 이전의 작은 값을 보장하면 그것들의 합이 최소라는 것에 대해선 DP라고 볼 수 있다. https://www.acmicpc.net/problem/4485 #맞은 풀이 #include using namespace std; int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; int cave[126][126]; int main(){ int cnt = 0; while(1){ cnt++; int n; cin >> n; if(n == 0)break; int dp[126][126]; //행:r 열:c for(int r = 0; r cave[r][c]; dp[r][c] = INT_MAX; } ..

백준, BOJ, 2174번, 로봇 시뮬레이션 C++ [CPP] ★★★

어렵지 않았다. 다만 귀찮아서 힘들었다. 구현문제는 역시 뭔가 힘들다. https://www.acmicpc.net/problem/2174 #맞은 풀이 #include using namespace std; struct Robot{ int x; int y; int dir; int number; }; //N (0,1) : 0 S(0,-1) : 1 //W (-1,0) : 2 E(1,0) : 3 int dx[4] = {0,0,-1,1}; int dy[4] = {1,-1,0,0}; int board[101][101]; //로봇의 위치 0(없음) 나머지 숫자(있음) bool isError; int main(){ int A,B; cin >> A >> B; int N,M; cin >> N >> M; vector robo..

백준, BOJ, 11497번, 통나무 건너뛰기 C++ [CPP] ★★★

사실 그냥 이렇게 배치하면 무조건 최소로 될 것이다.라는 감이와서 한 것인데.. 은근히 시간 오래걸렸다. https://www.acmicpc.net/problem/11497 #맞은 풀이 #include using namespace std; //이웃하는 통나무의 최대 차이가 가장 적게 나는 배치 순서 // | x1 - x2 | 가 가장 작아야 한다. => 원형으로 배치되어있음 //통나무 개수는 10000개까지임 // 5개가 있다고 할 때 아래처럼 배치해야함. 즉, 첫번째를 중심으로 양쪽에 작은것부터 넣는다. // 1 // 2 3 // 4 5 //덱을 이용하겠다. int main(){ int test; cin >> test; while(test--){ int num; cin >> num; vector log..

백준, BOJ, 16928번, 뱀과 사다리 게임 C++ [CPP] ★★★★★

은근히.. 헷갈렸다. 사실 쉬웠는데.. 헷갈렸다. 짜증난다 ㅠㅠㅠ BFS문제면서 DP 문제라고 생각하면 되겠다. https://www.acmicpc.net/problem/16928 #맞은 풀이 #include using namespace std; vector fromTo; //보드 int dist[101]; //array[출발]=도착 int arr[101]; int main(){ int N, M; cin >> N >> M; for(int i = 0; i> start >> finish; arr[start] = finish; } //배열초기화(시작주소, 종료주소(얼만큼 할지), 값) fill(dist, dist+101, -1); //1부터 BFS로 시작 dist[1] = 0; queue q; q.push(1..

728x90
반응형