https://programmers.co.kr/learn/courses/30/lessons/67257 풀이 과정 연산이 string 자료형으로 주어졌기 때문에, 반복문을 돌려 num 벡터에 숫자를 담고, op 벡터에 연산자를 담는다. 그리고 3가지 연산문자를 준비해 순열 알고리즘을 쓴다. 그 이유는 우선순위를 정하기 위해서다. 처음에는 *, +, - 순으로 우선순위가 정해져 계산을 하는데, 계산을 하는 도중에 원래 벡터들을 삭제하는 과정이 있기 때문에 num벡터와 op벡터를 순열이 시작될 때마다 temp 벡터로 만들어줘야한다. - 새로 알게된 점! max를 쓰려면 두 자료형이 맞아야 한다. 예를 들어 max(int, long long)이면 안 되고, max(long long, long long)이여야만 ..
🍞 Algorithm/Programmers
https://programmers.co.kr/learn/courses/30/lessons/12978 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 다익스트라 알고리즘의 기본 문제이다. 양방향으로 통행할 수 있다고 했으니 시작 -> 도착, 도착 -> 시작 둘 다 연결해준다. #include #include using namespace std; const int INF = 1e9; vector dist; vector edge[51]; priority_queue pq; // 가중치, 정점 void dijkstra(int n){ dist.resize..
https://programmers.co.kr/learn/courses/30/lessons/17687 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 이 문제는 10 ~ 15는 각각 대문자 A ~ F로 출력해야되기 때문에 어렵게 느껴질 수 있다. 그러나, number 변수에 '0'~'F'를 담아두고, 나머지를 인덱스로 사용하면 된다. 진수에 따라 Num 함수를 실행시켜주고 이어붙여준다. 그 문자열을 반복문을 돌려 첫 인덱스는 튜브의 순서 p에 -1한 값이고 게임에 참가하는 인원 m만큼 플러스를 해주면 답이 나온다. #include #include..
https://programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 이 문제는 노란색의 가로 세로를 구해 + 2씩 해주면 갈색을 포함한 전체 가로 세로가 나오게 된다. 그러나, brown 24 yellow 24인 경우 답은 8, 6이지만 이중 for문을 돌다보면 10(8 + 2), 5(3 + 2)가 먼저 나오게 된다. 이럴 경우에는 brown 수가 맞지 않으므로(50 - 24 != 24) 다음으로 넘어가게 구현하면 된다. #include #include using ..
https://programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 흩어진 종이 조각을 붙여 소수를 만들어낼 수 있는 경우를 v 벡터에 담는다. 이를 위해서 순열 알고리즘을 썼는데 이 알고리즘을 쓰기 전엔 문자열이라도 항상 정렬을 해줘야 한다. 안 그럼 오류가 난다! v벡터에 다 넣어줬으면 중복을 제거한다. 중복을 제거하기 전에도 항상 정렬을 해줘야 한다! 그 다음 에라토스테네스의 체 알고리즘을 써 소수를 찾아준다. 풀이 1 #include #include #inc..
https://programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 오름차순으로 정렬한 뒤, 이분탐색 알고리즘을 써서 맨 앞과 맨 뒤의 무게를 더해 limit보다 작으면 앞의 사람, 뒤의 사람 2명 같이 구출할 수 있다는 뜻이므로 left를 +1 해주고, right를 -1 해준다. 만약 limit보다 크다면, 같이 구출할 수 없기 때문에 뒤의 사람인 right 사람만 탈출한다는 뜻으로 right만 -1 해준다. left와 right가 같을 때까지 while문을 돌려..
https://programmers.co.kr/learn/courses/30/lessons/42746 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 이 문제는 int로 주어진 벡터를 string으로 바꿔줘서 정렬을 해주는 것이 중요하다. 문자열을 이어붙였을 때, a + b > b + a로 내림차순 정렬을 해준다. 저 조건을 걸지 않는다면, 9 5 34 30 3 순으로 정렬되기 때문에 9534303이 나와 가장 큰 수가 아니게 된다. 9 5 34 3 30 순으로 정렬되게 하기 위해서 330 > 303 조건을 걸어줘야 한다. 그리고 히든 케이스 중..
https://programmers.co.kr/learn/courses/30/lessons/17677 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 소문자와 대문자의 차이는 무시한다고 했으니 초반에 다 소문자로 바꿔준다. 그리고 두 글자씩 끊어서 다중집합을 만들기 때문에 str1의 집합들을 v1벡터에 넣고, str2의 집합들을 v2벡터에 넣는다. v1의 크기와 v2의 크기를 더하면 중복을 포함한 합집합이 된다. 교집합을 구할 땐 find 함수를 써서 교집합이 있다면 그 수를 삭제해주고 카운트를 해준다. 중복 포함 합집합에서 교집합을 빼면 중복을..
https://programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 이해하기가 어려운 문제지만, 이해한다면 쉽게 풀 수 있는 문제이다. h회 이상 인용된 논문이 h개인지 찾는 최대값 문제이다. 내림차순으로 정렬하고 현재 인덱스 값 + 1보다 크거나 같으면 답이 된다. i = 0, citation 6 이상의 논문 1편 이상 i = 1, citation 5 이상의 논문 2편 이상 i = 2, citation 3 이상의 논문 3편 이상 i = 3, citation 1 이..
https://programmers.co.kr/learn/courses/30/lessons/42587 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 이 문제는 우선순위 큐와 큐, 두개를 사용하는 문제이다. 우선순위 큐에는 중요도를 넣고, 큐에는 중요도와 index값을 넣어준다. 큐가 비지 않을 때까지 반복문을 돌고, 우선순위 큐 top값이 큐의 앞부분과 같다면 인쇄를 수행하므로 answer에 1씩 더해준다. 중요도도 젤 크고, 알아내야 하는 순서 location의 위치가 큐의 앞부분과 같다면 반복문을 끝내는 식으로 구현했다. #include #..