[프로그래머스][Level2] 멀리 뛰기 c++
·
🍞 Problem Solving/Programmers
https://programmers.co.kr/learn/courses/30/lessons/12914 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이과정 1칸일 때는 1 2칸일 때는 1 + 1, 2 3칸일 때는 1 + 1 + 1, 1 + 2, 2 + 1 이므로 피보나치 규칙을 찾을 수 있다. #include #include using namespace std; int dp[2001]; int dynamic(int n){ dp[1] = 1; dp[2] = 2; for(int i = 3; i
[프로그래머스][Level2] 더 맵게 c++
·
🍞 Problem Solving/Programmers
https://programmers.co.kr/learn/courses/30/lessons/42626 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이과정 우선순위 큐는 기본 정렬이 내림차순이기 때문에 greater를 통해 오름차순으로 정렬해준다. 우선순위 큐에 스코빌 지수를 넣고, 무한 반복문을 돌면 되는데 탈출 조건이 두가지가 있다. 첫번째로는 pq.size()가 2보다 작으면 pop을 두번 할 수 없고 모든 음식의 스코빌 지수를 K이상으로 만들 수 없다는 뜻이기 때문에 -1을 return 해준다. 두번째로는 pq.top()이 K보다 크거나 같을 때..
[프로그래머스][Level2] 다음 큰 숫자 c++
·
🍞 Problem Solving/Programmers
https://programmers.co.kr/learn/courses/30/lessons/12911 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이과정 이 문제는 10진수를 2진수로 바꾼 뒤, 1의 개수만 같으면 되기 때문에 특별히 reverse를 해주지 않았다. 처음 n을 2진수로 변경했을 때 1의 개수를 cnt1에 담고, n을 계속 1씩 더하여 2진수로 변경했을 때 1의 개수를 res에 담아서 두 값이 같다면 무한 반복문을 탈출하여 n값을 리턴하는 식으로 구현했다. #include #include using namespace std; string..
[프로그래머스][Level2] 게임 맵 최단거리 c++
·
🍞 Problem Solving/Programmers
https://programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이과정 bfs의 가장 기본 알고리즘이다. 만약 dist[maps.size() - 1]maps[0].size() - 1] 부분이 0이라면 도달하지 못했다는 뜻이므로 -1을 리턴해준다. #include #include using namespace std; int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, -1, 0, 1}; int dist[101][101]; int bfs(int x, ..
[프로그래머스][Level2] 124 나라의 숫자 c++
·
🍞 Problem Solving/Programmers
https://programmers.co.kr/learn/courses/30/lessons/12899 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이과정 이 문제는 3진법의 변형 문제이다. 10진수에서 3진수를 구할 때의 알고리즘을 쓰면 되는데 만약에 나머지가 0이라면 0 대신 4를 붙여주면 되는 문제이다. 더하여, n의 값에 -1을 해줘야한다. 풀이 1 #include #include #include using namespace std; string solution(int n) { string answer = ""; while(n != 0){ if(..
[프로그래머스][Level2] 2개 이하로 다른 비트 c++
·
🍞 Problem Solving/Programmers
https://programmers.co.kr/learn/courses/30/lessons/77885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이과정 이 문제는 홀수인지, 짝수인지 구분해서 해결해야하는 문제이다. 짝수일 경우에는 비트의 끝자리가 항상 0이기 때문에 다음 숫자가 들어오면 끝자리가 0에서 1로 바뀌게 된다. 그러므로 x보다 큰 값은 항상 현재값 + 1이 된다. 그러나, 홀수일 경우에는 비트의 끝자리가 항상 1이기 때문에 **올림수**가 발생하게 된다. 1이 연속하는 수를 세어 3번 연속이라면 2의 2제곱, 4번 연속이라면 2의 3제곱 ..
[프로그래머스][Level2] 2 x n 타일링 c++
·
🍞 Problem Solving/Programmers
https://programmers.co.kr/learn/courses/30/lessons/12900 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이과정 2 x n 타일링은 피보나치 규칙이다. 그러므로 다이나믹 프로그래밍의 기본대로 구현하면 된다. #include #include using namespace std; int dp[60001]; int dynamic(int n){ dp[1] = 1; dp[2] = 2; for(int i = 3; i
[C++] 문자열 자르기 사용법 substr()
·
🍞 Problem Solving/C & C++
📌 substr() 문자열에서 원하는 위치에 있는 문자열을 얻기 위해 substr 함수를 사용한다. substr 함수 기본적인 사용 방법은 아래와 같다. 문자열.substr(시작 위치, 길이) - 첫 번째 인수에는 시작 위치를, 두 번째 인수에는 취득하고 싶은 문자수를 지정한다. - 문자열 시작은 0부터다. #include using namespace std; int main() { string str = "abcde"; cout
[C++] 입력 개수 모를 때 무한 반복문 제어 cin.eof()
·
🍞 Problem Solving/C & C++
무한 반복문을 제어하는 문제를 풀다가 막혀서 정리하고자 한다. 데이터 소스에서 더 이상 읽을 데이터가 없어 EOF(End Of File)를 리턴하면 종료해야 하므로 EOF가 true면 반복문을 탈출하도록 만든다. EOF: 입력의 끝 "입력의 끝"(eof)에 다다랐다면, 반복문에서 탈출한다라는 뜻을 가진 구문이다. if (cin.eof() == 1) { break; } ex) https://www.acmicpc.net/problem/14909 14909번: 양수 개수 세기 첫째 줄에 최대 1,000,000개의 정수가 주어진다. 입력으로 주어지는 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같다. www.acmicpc.net #include using namespace std; ..
[백준] 1507 궁금한 민호 c++
·
🍞 Problem Solving/Baekjoon
https://www.acmicpc.net/problem/1507 1507번: 궁금한 민호 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 각각의 도시 사이에 이동하는데 필요한 시간이 주어진다. A에서 B로 가는 시간과 B에서 A로 가는 시간은 같다. 또, A와 B www.acmicpc.net 풀이과정 예제 입력으로 플로이드 와샬 알고리즘을 수행한 시간이 입력된다. 그럼에도 불구하고, 플로이드 와샬을 할 때 어느 도시를 거치는 게 더 짧다면 최소 이동시간이 아니므로 이는 불가능한 경우에 해당되며 -1을 출력한다. i에서 j로 가는 경로가 k로 거쳐가는 경우와 같다면 모든 경로를 최소의 도로로 커버해야 하므로 k를 거쳐가는 도로를 선택한다. #include #inclu..