분류 전체보기 120

[프로그래머스] 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

[백준 1926] 그림

문제설명 알고리즘 1. 가로 세로 및 그림의 정보 입력 및 저장 2. dfs 알고리즘을 사용하되, 가로세로 연속된 그림의 넓이와 수를 구함 3. 출력 코드 #include #include #include using namespace std; #define MAX 505 int graph[MAX][MAX]; int visited[MAX][MAX]; int max_width, N,M,width; void dfs(int x,int y) { visited[x][y] = true; //방문 width++; //가로 세로 넓이 구함, 단 범위 판단 필수 if (graph[x + 1][y] == 1 && visited[x + 1][y] == 0 && (x+1 < N)) { dfs(x + 1, y); } if (gra..

Algorithm 2022.06.27

[백준 18352] 특정 거리의 도시 찾기

문제설명 주어진 노드의 수, 도로 개수, 거리정보, 출발 도시의 정보를 입력 받은 뒤, 거리 정보가 일치하는 섬을 출력시키는 문제이다 이때 섬은 단방향으로만 연결 되어있으며 , 범위는 위의 사진과 같다 알고리즘 1. 주어진 정보를 입력 받는다 2. 간선의 정보를 단방향으로 벡터에 넣는다 3. bfs 알고리즘을 사용하되 , 각 노드에 도달하는데 걸리는 값을 방문 여부에 저장한다(이때 시작점으로 돌아가는 경우는 제외) 4. 각 노드에 도달하기 위해 필요한 값을 K와 일치하는지 비교하고, 일치하면 벡터에 넣는다 5. 벡터가 비어있는 경우 -1을 출력한다 코드 #include #include #include #include using namespace std; vector road; int N, M, K, X;..

Algorithm 2022.06.25

[백준 1026] 보물

문제설명 주어진 입력을 받은 뒤, 배열끼리의 최소합을 구해서 출력한다 이때 오로지 A배열의 값만 순서를 바꾼다 알고리즘 1. 입력될 수의 갯수와 각 배열을 입력 받는다 2. A배열은 오름차순, B배열은 내림차순으로 정렬한다 3. 각 인덱스에 맞게 곱하여 총 합을 출력한다 코드 #include #include #include using namespace std; int A[51]; int B[51]; int main() { int n; cin >> n; for (int i = 1; i > A[i]; for (int i = 1; i > B[i]; sort(A+1, A + n+1); sort(B+1, B + n+1,greater()); int sum = 0; for (int i = 1; i

Algorithm 2022.06.24

[프로그래머스] 구명보트

문제설명 보트는 한번에 두 명씩 탑승 할 수 있으나, 무게 제한을 넘길 수는 없다 최소한으로 보트를 움직이는 수를 구하라 알고리즘 1. 주어진 사람의 무게 벡터를 오름차순으로 정렬한다 2. 제일 가벼운 사람과 그 다음사람 두명이 한 보트에 타지 못한다면, 보트는 인원수 만큼 움직인다 3. 벡터에서 제일 무거운 사람의 무게를 꺼내고 지운다 4. 만약 그 값과 제일 가벼운사람부터 조회하여 한 보트에 탈 수 있는 경우, idx를 증가 시킨다 5. 한 보트에 탈 수 없는 경우 그 사람은 혼자 탄다-> 그 다음으로 무거운 사람을 꺼낸다 6. 보트에 둘이 탈 수 있던 없던 1씩 증가시킨다 (혼자 타는 경우, 둘이타는 경우 모두 배가 한번 움직임) 코드 #include #include #include #include..

Algorithm 2022.06.24

[Map] C++ STL

1. Map 이란? - Key, Value 쌍으로 이루어진 자료구조 - key는 중복 될 수 없음 - 넣으면 자동으로 key 기준 오름차순 정렬 됨 2. 사용방법 1) header 선언 #include 2) 변수 선언 map m ; 3) 값 삽입 m[key]=value; m.insert({key,value}); // key, value는 pair형태 이므로 {}안에 값을 넣어야함 4) 값 삭제 m.erase(key); //주어진 key에 대해 key의 value까지 지운다 m.clear(); //전체 삭제 5) 값 조회 m[key]; //value 값이 조회된다 6) 값 검색 m.find(key); //key 값을 검색한다

Algorithm/STL 2022.06.22

[백준 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