Algorithm 102

[프로그래머스] 뒤에 있는 큰 수 찾기

문제설명 알고리즘 1. 수를 stack에 입력 받는다 first는 숫자, second는 인덱스 값이 된다 2. stack이 비어있지 않다면, 맨 위의값을 꺼내어 현재 숫자와 비교하여 크거나 같으면 반복문을 빠져나가고 그렇지 않으면 stack에서 뺀다 3. 반복문을 나온 상태이면 현재 수 값과 인덱스를 저장한다 코드 #include #include #include using namespace std; vector solution(vector numbers) { vector answer(numbers.size(), -1); stack st; for(int i =0 ; i< numbers.size() ; i++){ while(!st.empty()){ pair top = st.top(); if(top.first..

Algorithm 2023.03.05

[프로그래머스] 가장 가까운 같은 글자

문제설명 알고리즘 1. 알파벳과 그 인덱스를 map 에 저장한다 2. map에서 해당 key를 조회하고 있으면 그 value와 문자열을 순회하는 index값을 빼어 결과값에 저장 3. key가 없는 경우 결과값에 -1 저장, 그리고 map에 key값과 현재 index저장 코드 #include #include #include using namespace std; vector solution(string s) { vector answer; map m; for(int i=0; i< s.size(); i++){ char temp = s[i]; if(m.count(temp)){//해당 알파벳이 있으면 answer.push_back(i-m[temp]); //제일 가까운 위치 구해서 거리 저장 m[temp] = i;..

Algorithm 2023.02.24

[프로그래머스] 귤 고르기

문제설명 알고리즘 1. 귤의 크기 별 몇 개 존재하는 지 카운트 -> (key, value) 형태인 map이 가장 적절 2. MAP에 넣은 뒤, 귤의 갯수 기준으로 내림차순 정렬 3. 벡터로 변환하여 벡터 순회하여 k 개에서 최대 귤 수 부터 k 값 감소 시키기 & 결과 값 증가 코드 #include #include #include #include #include using namespace std; bool cmp (const pair &a, const pair &b){ if(a.second == b.second) return a.first > b.first; return a.second > b.second; } int solution(int k, vector tangerine) { int answer..

Algorithm 2023.02.22

[프로그래머스] 명예의 전당(1)

문제설명 알고리즘 1. 점수 값을 조회하면서 다른 벡터에 값을 넣는다 2. 내림차순으로 정렬한다 3. K번째가 되기전까지는 가장 큰 인덱스 값이 최하 값이고, K번째까지 벡터에 들어왔을 경우 K-1번째가 최하값이므로 저장한다 코드 #include #include #include #include using namespace std; vector solution(int k, vector score) { vector answer; vector temp; for(int i=0; i< score.size(); i++){ int current = score[i]; temp.push_back(current); sort(temp.rbegin(), temp.rend()); // 내림차순 정렬 if(i

Algorithm 2023.02.22

[프로그래머스] 과일장수

문제설명 해당 문제는 주어진 값에서 얻을 수 있는 최대 가치를 계산하는 문제이다 상자에 과일의 가치가 주어지면 한 상자에 들어갈 수 있는 과일의 수와 최대 과일의 가치 값을 입력받는다 알고리즘 1. 과일의 가치를 내림차순으로 정렬한다 2. 팔 수 있는 최대의 상자 수 만큼 반복문을 돈다(남는 과일은 버리기 때문에 완성되는 상자 기준으로 계산한다) 3. 각 상자마다 가장 가치가 낮은 것이 얻을 수 있는 값이기 때문에 각 상자마다 제일 가치가 낮은 인덱스에 접근해서 결과 값을 계산한다 코드 #include #include #include #include using namespace std; int solution(int k, int m, vector score) { int answer = 0; //내림차순 ..

Algorithm 2022.11.14

[백준 7569] 토마토

문제설명 토마토가 상자안에 들어있다 가로M, 세로N, 높이 H로 상자가 주어진다 1은 토마토가 익어있다는 의미이고, -1은 빈 공간이다. 하루마다 익은 토마토를 기점으로 위,아래, 상,하,좌,우가 익는다 모든 토마토가 다 익는데 걸리는 최소한의 기간을 출력시킨다 단, 토마토가 원래 다 익어있는 경우에는 0을 출력하고, 토마토가 다 익지 못하는 경우는 -1을 출력시킨다 알고리즘 1. 입력 정보 받기 2. 그래프의 값이 1인(토마토가 익은경우) queue에 그 좌표값을 넣는다 3. bfs알고리즘을 사용하여 상,하,좌,우, 위, 아래를 모두 확인한다 4. 방문기록을 조회하여 0이 남아있는 경우 -1을 출력하고 그렇지 않은 경우엔 최대값을 출력시킨다 코드 #include #include #include usin..

Algorithm 2022.07.11

[백준 5525] IOIOI

문제설명 알고리즘 1. 입력받기 2. N으로 패턴 만들기 3. 주어진 문자열 S에서 N을 find함수로 찾기 4. 찾을때 마다 결과값 변수 1씩 증가, index를 업데이트 1. 입력받기 2. I를 만날때 마다 바로 뒤에 OI가 있으면 k증가, 문자열 index를 2씩 증가 3. OI가 I이후로 N번 나오면 패턴 매칭이 완료된 것이므로 결과 값 증가 , k 감소 4. 결과값 출력 코드 #include #include using namespace std; int main() { int N, M,cnt=0; cin >> N >> M; string S; cin >> S; /*string val; for (int i = 1; i

Algorithm 2022.07.11

[백준 1992] 쿼드트리

문제설명 알고리즘 1. 그래프 정보 입력 받기 2. 4등분 해서 해당 네모가 모두 같은 값으로 이루어진지 판단 3. 모두 같은 값이면 그 값을 출력하고 종료 4. 모두 같은 값이 아니면 또 4등분 해서 반복 코드 #include #include using namespace std; int graph[65][65]; void cut(int a, int b, int size) { int cnt_0 = 0, cnt_1 = 0; for (int i = a; i < a + size; i++)//모두 1이거나 모두 0 인경우 판단 { for (int j = b; j < b + size; j++) { if (graph[i][j]) cnt_1++; else cnt_0++; } } if (!cnt_0 && cnt_1) ..

Algorithm 2022.07.10