Algorithm 102

[백준 14503] 로봇 청소기

문제설명 알고리즘 1. 입력 받기 : 그래프 크기, 현재 위치, 방향, 그래프 형태 2. 방향 설계 -> 북 서 남 동 순으로 회전하기 때문에 dx,dy에 전진할때 발생하는 값을 정의해 둔다 3. 왼쪽으로 돌고, 안갔으면 간다. 단 갔으면 왼쪽으로 돈다 4. 4방향 다 돌았는데 갈 수 있는 곳이 없는 경우 그 자리에서 1칸 후진한다 5. 후진하려는데 그 뒤도 막혔으면 종료 코드 1) 시행착오 #include using namespace std; //탐색 int dx[4] = { 0,-1,0,1 }; //d=0 ~ 3일때 x의 이동 값 int dy[4] = {-1,0,1,0 }; //d=0 ~ 3일때 y의 이동 값 //후진 int bx[4] = { 1,0,-1,0 }; //d=0 ~ 3일때 x의 이동 값 ..

Algorithm 2022.07.03

[프로그래머스] 숫자 문자열과 영단어

문제설명 주어진 문자열을 입력 받고, 영단어로 된 단어를 숫자로 변환시켜 총 결과 숫자 값을 출력한다 알고리즘 1. 배열에 숫자영단어와, 숫자를 각각 저장해둔다 2. 반복문을 통해서 0부터 9까지 영단어가 있을때 숫자로 대체한다 3. 단, 같은 숫자가 나올 수 있기 때문에 반복하여 연산을 진행하되 탈출조건은 다음과 같다 3.1) 현재 연산중인 문자열을 정수로 바꾸고 다시 문자로 바꾸면 자릿수를 알 수 있다 -> 자릿수비교를 통해 동일하면 탈출 코드 #include #include #include using namespace std; string idx[10]={"zero","one","two","three","four","five","six","seven","eight","nine"}; string id..

Algorithm 2022.07.01

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