알고리즘 49

[프로그래머스] 124 나라의 숫자

문제설명 124나라 라는 의미는 10진수가 아닌 1,2,4 로 값을 표현하라는 뜻이다 즉, 수가 입력되면 위의 예시처럼 124 표기법으로 결과 값을 출력하면된다 알고리즘 1. 구하고자 하는 값을 입력 받는다 2. 3으로 나눴을 때 나머지가 0인경우는 4를 저장하고, 그렇지 않은 경우 그 나머지를 저장한다 3. 나머지가 0인 경우에는 몫을 1 빼고 반복하여 연산을 진행한다 4. 몫과 나머지 모두 0 이되는 경우 연산을 중지하고, 저장된 값을 뒤집어서 반환한다 코드 #include #include #include #include using namespace std; string solution(int n) { string answer = ""; while(1){ if(n%3==0 && n/3==0) brea..

Algorithm 2022.06.30

[백준 1946] 신입 사원

문제설명 알고리즘 1. 입력 값 저장 2. 서류 점수 기준으로 오름차순 정렬 3. 서류 1등의 면접 점수를 기준으로 다음 사람들의 면접 점수를 조회해 더 높은 값이 나올때 마다 합격, 및 업데이트 코드 #include #include #include using namespace std; vector grade; int main() { int T, N; cin >> T; while (T) { cin >> N; for (int i = 0; i > x >> y; grade.push_back({x,y}); } sort(grade.begin(), grade.end()); //서류 기준 오름차순 정렬 int cnt = 1;// 1등은 합격 int inte..

Algorithm 2022.06.30

[백준 1107] 리모컨

문제설명 이 문제는 이동할 채널, 고장난 버튼을 입력 받고 채널 100번에서 최소한으로 이동하여 목표 채널에 도달하는 것이다 최소 이동 수를 출력시킨다 알고리즘 1. 입력이 불가능한 숫자 버튼을 배열에 true로 집어 넣는다 (arr[0]~arr[9]까지 중, true이면 그 버튼은 누를 수 없음) 2. N의 값이 100이면 바로 0을 출력 시킨다(버튼을 누를 필요 없음) 3. M의 값이 0이거나 현재 이동하려는 채널의 모든 버튼이 고장 나지 않은 경우 비교가 필요하다->(100번에서 + 또는 -를 이용해 가는데 필요 한 횟수, 숫자의 자리수) => 더 작은 값 출력 4. 가려는 채널의 버튼이 고장난 경우 반복문을 통해서 계산한다 4.1) minus, plus 선언 후, 해당 값이 리모컨으로 만들 수 있..

Algorithm 2022.06.30

[백준 9375] 패션왕 신해빈

문제설명 첫줄에 테스트 케이스가 주어진다 그리고 그 다음, 옷의 수가 입력되고, 그만큼 옷이 입력된다 의상의 이름과 종류가 공백을 기준으로 구분되어 입력된다 같은 종류의 의상은 하나만 입을 수 있는데, 아무것도 입지 않은 상태로 총 며칠을 지낼 수 있는지 출력시킨다 알고리즘 1. 테스트 케이스, 옷의 수를 입력 받는다 2. 옷의 수 만큼 반복하여 옷의 종류와 이름을 입력 받는다 3. map을 사용하여 옷의 종류가 중복 되면 value 값을 증가 시키고, 중복되지 않은 경우 map에 넣는다 4. 식은 결국 각 옷의 종류+1을 해서 곱하면된다 그리고 아무것도 안입는 경우 1을 뺀다 코드 #include #include #include #include #include using namespace std; in..

Algorithm 2022.06.22

[백준 2579] 계단 오르기

문제설명 규칙에 알맞게 주어진 입력값에 대해서 구해 낼 수 있는 최대값을 출력한다 계단의 수가 주어지고, 각 계단마다의 값이 주어진다 계단은 한번에 한칸 또는 두칸씩 오를 수 있으며, 세칸연속 밟는것은 불가능하다 그리고 마지막엔 반드시 마지막 칸을 밟아야한다 알고리즘 1. 계단의 각 정보를 입력 받는다 2. 3번째 계단까지 따로 계산해 둔다 3. 반복문을 통해서 n 번째 계단까지 구한다 4. n번째 계단의 값을 구한다 코드 #include #include #include using namespace std; int stair[301]; int dp[301]; int main() { int n; cin >> n; for (int i = 1; i > stair[i]; dp[1] = stair[1]; dp[2..

Algorithm 2022.06.21

[백준 1325] 효율적인 해킹

문제설명 이 문제는 연결관계를 파악하여 해킹 가능한 컴퓨터가 많은 컴퓨터를 출력한다 만약 그 갯수가 동일하다면, 컴퓨터의 번호를 오름차순으로 출력한다 알고리즘 1. 컴퓨터의 수와 간선의 관계를 입력받는다 2. 간선의 관계는 단방향으로 저장한다(b가 해킹되면 a도 가능하다) 3. bfs 함수에서 각 컴퓨터가 해킹가능한 컴퓨터의 수를 센다 4. 컴퓨터의 수와 컴퓨터 번호를 저장한다 5. 정렬을 통해 해킹 할 수 있는 컴퓨터의 수가 가장 많은것, 그리고 인덱스는 오름차순으로 정렬한다 6. 첫 값은 무조건 가장 크기때문에 이와 같은 값인 컴퓨터의 인덱스를 모두 출력한다 코드 #include #include #include #include using namespace std; vector graph[10001];..

Algorithm 2022.06.21

[백준 16953] A->B

문제설명 알고리즘 1. A,B를 입력 받는다 2. 함수로 이동하여 B로 부터 A로 만든다 3. queue에 B의 값을 넣고, 나누기 2 혹은 -1 한 뒤 , 10으로 나누었을 때 값이 A보다 작지 않으면 queue에 넣는다 4. a의 값이 현재 값과 같아지는 순간이 나오면 그 초를 결과로 출력한다 5. 만약 같아지는 순간이 오지 않았다면, -1을 출력한다 코드 #include #include #include using namespace std; int answer; bool check = false; void bfs(int x,int y) { queue q; // 나눗셈 연산에 의해 비교할 때 소수점 까지 비교필요 q.push(y); while (!q.empty()) { int size = q.size(..

Algorithm 2022.06.19

[백준 2644] 촌수 구하기

문제설명 해당 문제는 그래프에서 이동 수를 구하는 문제이다 시작 노드에서 도착 노드까지 도달하는데 이동 수를 구하면된다 먼저 총 가족의 수와 구하고자 하는 노드, 연결관계를 입력받는다 촌수 == 도달 하기위해 거쳐가야 하는 노드의 수 라고 생각하고 풀면된다 알고리즘 1. 필요한 정보(가족 수, 구하고자 하는 관계, 관계 정보)를 입력 받는다 2. 현재 노드에 방문 표시를 한다 3. 현재 노드와 연결된 노드를 조회하여 방문 하지 않은 경우 방문한다. 단 방문시 이동 값을 올려준다 4. 노드가 도착점에 닿았을 때 현재 이동한 수를 저장해둔다 5. 함수를 빠져나오면 저장해둔 이동 수를 출력시킨다 6. 만약 출발점에서 도착점에서 도달하지 못한 경우 -1을 출력시킨다 코드- (1) ->DFS #include #i..

Algorithm 2022.06.17

[백준 1697] 숨바꼭질

문제설명 해당 문제는 동생의 위치와 수빈이의 위치를 입력 받은 뒤 동생을 찾을 수 있는 가장 빠른 시간을 출력하면된다. 수빈이는 +1, -1, *2 로 매 초당 이동할 수 있다. 알고리즘 1. 수빈이와 동생의 위치를 입력받는다 2. 수빈이의 위치를 queue에 넣고 +1, -1, *2로 이동하였을 때 값이 지정범위를 벗어나는지, 방문한적 있는지 확인하고 조건에 맞는경우 queue에 넣는다 3. queue에서 front 값을 출력하여 도착지점에 도달하였는지 확인한다 -> 도달 시 반복문 탈출 4. 매 연산이 끝날 때 마다 초를 증가 시킨다 코드 #include #include #include using namespace std; #define MAX 100001 bool visited[MAX]; int b..

Algorithm 2022.06.17

[백준 9461] 파도반 수열

문제설명 테스트 케이스 수를 입력 받은 뒤, 입력되는 N의 값을 출력 시키면된다. 이 때 각 값의 정의를 보자면, P(1) = 1 P(2) = 1 P(3) = 1 P(4) = 2 P(5) = 2 P(6) = 3 P(7) = 4 P(8) = 5 P(9) = 7 P(10) = 9 값이 나오는 것을 확인할 수 있다. 이 값의 의미는 1번째 삼각형 일때 최대 정삼각형의 변의 길이가 1이라는 뜻이다. 즉 P(10)의 경우 10번째 삼각형을 위의 그림과 같은 규칙으로 그렸을 때 최대 정삼각형의 변의 길이가 9라는 의미이다. 해당 값을 나열해보면 다음과 같은 점화식을 구할 수 있다. P(N) = P(N-3) + P(N-2) 해당 식을 이용하여 코드를 짜면 된다. 알고리즘 1. 점화식을 이용하여 미리 답을 저장할 배열..

Algorithm 2022.06.17