Skip to content
Home » 로봇 청소기 알고리즘 | [삼성 Sw 역량 테스트 기출] 로봇청소기 인기 답변 업데이트

로봇 청소기 알고리즘 | [삼성 Sw 역량 테스트 기출] 로봇청소기 인기 답변 업데이트

당신은 주제를 찾고 있습니까 “로봇 청소기 알고리즘 – [삼성 SW 역량 테스트 기출] 로봇청소기“? 다음 카테고리의 웹사이트 kk.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: kk.taphoamini.com/wiki. 바로 아래에서 답을 찾을 수 있습니다. 작성자 na982 이(가) 작성한 기사에는 조회수 2,952회 및 좋아요 47개 개의 좋아요가 있습니다.

로봇 청소기 알고리즘 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [삼성 SW 역량 테스트 기출] 로봇청소기 – 로봇 청소기 알고리즘 주제에 대한 세부정보를 참조하세요

na982 블로그
http://na982.tistory.com
문제 주소 :
https://www.acmicpc.net/
ppt 템플릿 주소 :
http://blog.naver.com/PostThumbnailList.nhn?blogId=kingstargirl\u0026from=postList\u0026categoryNo=44\u0026parentCategoryNo=44

로봇 청소기 알고리즘 주제에 대한 자세한 내용은 여기를 참조하세요.

14503번: 로봇 청소기

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, …

+ 자세한 내용은 여기를 클릭하십시오

Source: www.acmicpc.net

Date Published: 10/16/2022

View: 271

KR101281512B1 – 로봇청소기 및 그 제어방법 – Google Patents

이를 위해 본 발명은, 로봇청소기의 제어방법에 있어서, 상기 로봇청소기가 왼쪽 또는 오른쪽 벽면을 따라 주행하는 좌수법 또는 우수법 주행 알고리즘에 기반하여 …

+ 여기에 자세히 보기

Source: patents.google.com

Date Published: 3/14/2022

View: 1963

로봇 청소기 소프트웨어의 원리 – naver 포스트

‘기계가 똑똑해졌다’라는 것은 소프트웨어가 진화했다는 이야기이다. 초기 로봇청소기 소프트웨어의 핵심 알고리즘은 직선으로 주행하다가 장애물을 …

+ 자세한 내용은 여기를 클릭하십시오

Source: m.post.naver.com

Date Published: 11/25/2021

View: 1455

[백준 알고리즘]14503번: 로봇 청소기_Java – Arinn’s Dev Log

[백준 알고리즘]14503번: 로봇 청소기_Java · 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 …

+ 여기에 보기

Source: arinnh.tistory.com

Date Published: 7/6/2021

View: 8580

[baekjoon 14503] 로봇 청소기 (구현, 시뮬레이션) (C++)

문제 풀이/백준 알고리즘. [baekjoon 14503] 로봇 청소기 (구현, 시뮬레이션) (C++).

+ 여기에 보기

Source: bbeomgeun.tistory.com

Date Published: 10/20/2022

View: 824

[논문]청소 로봇을 위한 특징점 맵 기반의 전 영역 청소 알고리즘

Feature Map Based Complete Coverage Algorithm for a Robotic Vacuum Cleaner. 한국지능시스템학회 논문지 = Journal of Korean institute of intelligent systems v.20 …

+ 여기에 자세히 보기

Source: scienceon.kisti.re.kr

Date Published: 7/30/2021

View: 202

백준 14503 로봇 청소기 C풀이 – 단순 알고리즘

백준 14503 로봇 청소기 C풀이 – 단순 알고리즘. 머리큰개발자 2021. 4. 7. 23:24. 문제에서 제시한 조건만 지켜서 탐색하면 완료되는 문제이다.

+ 여기에 표시

Source: forswdev.tistory.com

Date Published: 1/5/2021

View: 8977

주제와 관련된 이미지 로봇 청소기 알고리즘

주제와 관련된 더 많은 사진을 참조하십시오 [삼성 SW 역량 테스트 기출] 로봇청소기. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[삼성 SW 역량 테스트 기출] 로봇청소기
[삼성 SW 역량 테스트 기출] 로봇청소기

주제에 대한 기사 평가 로봇 청소기 알고리즘

  • Author: na982
  • Views: 조회수 2,952회
  • Likes: 좋아요 47개
  • Date Published: 2018. 12. 13.
  • Video Url link: https://www.youtube.com/watch?v=uDLPpFbARqg

14503번: 로봇 청소기

문제

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오.

로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다.

로봇 청소기는 다음과 같이 작동한다.

현재 위치를 청소한다. 현재 위치에서 현재 방향을 기준으로 왼쪽방향부터 차례대로 탐색을 진행한다. 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다. 왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다. 네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다. 네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춘다.

로봇 청소기는 이미 청소되어있는 칸을 또 청소하지 않으며, 벽을 통과할 수 없다.

KR101281512B1 – 로봇청소기 및 그 제어방법 – Google Patents

G — PHYSICS

G05 — CONTROLLING; REGULATING

G05D — SYSTEMS FOR CONTROLLING OR REGULATING NON-ELECTRIC VARIABLES

G05D1/00 — Control of position, course or altitude of land, water, air, or space vehicles, e.g. automatic pilot

G05D1/02 — Control of position or course in two dimensions

G05D1/021 — Control of position or course in two dimensions specially adapted to land vehicles

G05D1/0212 — Control of position or course in two dimensions specially adapted to land vehicles with means for defining a desired trajectory

[백준 알고리즘]14503번: 로봇 청소기_Java

[문제]

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오.

로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다.

로봇 청소기는 다음과 같이 작동한다.

현재 위치를 청소한다. 현재 위치에서 현재 방향을 기준으로 왼쪽방향부터 차례대로 탐색을 진행한다. 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다. 왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다. 네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다. 네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춘다.

로봇 청소기는 이미 청소되어있는 칸을 또 청소하지 않으며, 벽을 통과할 수 없다.

[입력]

첫째 줄에 세로 크기 N과 가로 크기 M이 주어진다. (3 ≤ N, M ≤ 50)

둘째 줄에 로봇 청소기가 있는 칸의 좌표 (r, c)와 바라보는 방향 d가 주어진다. d가 0인 경우에는 북쪽을, 1인 경우에는 동쪽을, 2인 경우에는 남쪽을, 3인 경우에는 서쪽을 바라보고 있는 것이다.

셋째 줄부터 N개의 줄에 장소의 상태가 북쪽부터 남쪽 순서대로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 빈 칸은 0, 벽은 1로 주어진다. 지도의 첫 행, 마지막 행, 첫 열, 마지막 열에 있는 모든 칸은 벽이다.

로봇 청소기가 있는 칸의 상태는 항상 빈 칸이다.

[출력]

로봇 청소기가 청소하는 칸의 개수를 출력한다.

[예제]

>문제 풀이

문제가 길고, 조건이 많다. 문제를 읽으면서 로봇 청소기 동작 원리를 대충 파악해야 안헷갈리고 풀 수 있다.

<입력>

N, M (배열 사이즈)

r, c (( r , c ):좌표 값)

d (direction: 청소기 방향)

배열 값들이(mat[N][M]) 입력된다.

이 문제는 주어진 방향을 기준으로 주변을 탐색해보면서 깊이있게 뻗어나가는 탐색을 한다.

그래서 dfs가 적합할 것이라 생각하여 dfs로 풀었다.

dfs(int x, int y, int dir) 함수{

1) 현재 위치 청소

2) 현재 위치와 방향 기준

왼쪽 방향의 공간이 청소되어있지 않으면? 1)번 부터 왼쪽 방향의 공간이 청소되어 있으면? dir를 왼쪽 방향으로 바꾸고 2)번으로 네 방향 모두 청소되어있거나 벽이면? dir를 유지한채로 한 칸 후진 후 2)번으로 네 방향 모두 청소되어있거나 벽이고 && 후진도 못하는 상황?? 작동 종료

}

각각의 조건에 대한 상황과 원하는 동작 처리를 잘 생각해야한다.

게다가 방향에 대한 조건이 0: 북, 1:동, 2:남, 3:서 로 반시계 방향도 아니기 때문에, 방향을 바꿀 때 처리를 주의해줘야 한다.

>전체 코드

import java.util.*; public class Main { static int N, M, cnt=0; static int mat[][], visited[][]; public static void main(String [] args) { int r, c, d; //(r, c)좌표, d:방향 Scanner scan= new Scanner(System.in); N= scan.nextInt(); M= scan.nextInt(); r= scan.nextInt(); c= scan.nextInt(); d= scan.nextInt(); //0북, 1동, 2남, 3서 mat= new int[N][M]; visited= new int[N][M]; for(int i=0; i=N||ny<0||ny>=M) { }else if(mat[nx][ny]==0&&visited[nx][ny]==0) { dfs(nx, ny, dir); cnt++; break; } cant++; } x= x-dx[dir]; y= y-dy[dir]; if(x<0||x>=N||y<0||y>=M) { return; }else if(cant==4&&mat[x][y]==0) { dfs(x, y, dir); } }//dfs }

https://www.acmicpc.net/problem/14503

[baekjoon 14503] 로봇 청소기 (구현, 시뮬레이션) (C++)

728×90

https://www.acmicpc.net/problem/14503

로봇 청소기가 청소할 수 있는 영역의 개수를 구해야 한다.

일반 4방향 탐색이 아닌, 기본적으론 반시계 방향 탐색을 하며 여러 가지 규칙이 있다.

현재 위치를 청소한다. 현재 위치에서 현재 방향을 기준으로 왼쪽 방향부터 차례대로 인접한 칸을 탐색한다. 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다. 왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다. 네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다. 네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춘다.

사실 구현, 시뮬레이션 문제는 규칙 따라 하라는 대로 하면 풀린다. 하지만 보통 규칙이 복잡해서 정리가 안된다.

나의 경우 규칙 2-3을 제대로 읽지 않아서 디버깅에 시간을 좀 썼다.

“네 방향 모두 청소가 이미 되어있거나 벽인 경우에는” 이란 키워드에 집중해서 후진도 저 케이스에는 못하는 걸로 생각했다. 하지만 후진은 벽이 아니면 가능하다!

또한, 2-1이 부합하면 회전 후 한 칸 전진이고, 2-2면 그냥 회전만 한다.

나머지 조건은 귀찮은 조건들이어서 차근차근 풀었다.

1번 조건은 그 영역을 청소한다 이므로 그냥 flag를 이용해서 cnt++만 해주었다.

그리고 2번 조건은 왼쪽 방향부터 차례차례 4방향을 봐야 하므로 for문을 이용해주었고

2-1 조건에 부합하면 for문을 벗어나 주었다.

2-2 조건에 부합하면 for문을 벗어나지 않고 다음 방향으로 회전만 하고 계속 진행.

2-3 조건에 부합하면 방향 따라 후진하고 후진 가능하면 후진, 아니면 종료했다.

#include using namespace std; int n, m, room[51][51], r, c, d, check[51][51]; int moving[4][2] = { {-1, 0}, {0, 1}, {1, 0}, {0, -1}}; int searching(int startX, int startY, int dir) { int cnt = 0; int x = startX, y = startY, d = dir; int searchFlag = true; while (1) { if (searchFlag) { // 청소 가능하면 그 영역을 청소하고 영역을 센다. if (!check[x][y]) { cnt++; check[x][y] = true; } } // 아니면 바로 조건 2번(반시계 4방향 탐색 시작) searchFlag = false; // 조건 2-b, 2-c를 위해서 매번 초기화 for (int i = 0; i < 4; i++) { int nd = (d + 3) % 4; int nx = x + moving[(d + 3) % 4][0]; int ny = y + moving[(d + 3) % 4][1]; if (nx >= 0 && nx < n && ny >= 0 && ny < m) { if (room[nx][ny] == 0 && !check[nx][ny]) { x = nx; y = ny; d = nd; searchFlag = true; break; } // 다시 1번으로(현재 위치 청소) else if (room[nx][ny] == 1 || check[nx][ny]) { check[nx][ny] = true; d = nd; // 방향만 갱신해준다. continue; // 다른 방향을 봐야하므로 for문을 벗어나지 않는다. } } } if (!searchFlag) { // 4방향 이미 청소되어 있다면 방향 그대로 후진 x = x + moving[(d + 2) % 4][0]; y = y + moving[(d + 2) % 4][1]; if (x < 0 || y < 0 || x >= n || y >= m) return cnt; if (room[x][y] == 0) // 벽이 아니면 계속 진행 continue; if (check[x][y]) // 벽 + 후진했는데 이미 청소한 곳이면 종료 return cnt; } } return cnt; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; cin >> r >> c >> d; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> room[i][j]; } } cout << searching(r, c, d); } 728x90

[논문]청소 로봇을 위한 특징점 맵 기반의 전 영역 청소 알고리즘

초록

청소 로봇의 중요한 기술 중 하나는 커버리지 성능이다. 대부분의 가정용 청소 로봇들은 로봇의 크기나 제작 비용 때문에 로봇을 구성하는 시스템 구성에 제약을 받게 된다. 이러한 이유 때문에 청소 로봇의 가장 중요한 요소인 커버리지 성능을 높이는데 필요한, 위치 인식이나 맵 구성을 위한 기존의 알고리즘들을 쉽게 적용할 수가 없다. 본 논문에서는 청소 로봇을 위한 두 가지 문제에 초점을 맞추어 이를 해결 할 수 있는 방안을 제시한다. 먼저 계산 량을 줄여 저가형 시스템을 구성할 수 있어야 한다. 이를 위해 청소 환경을 단순화 하는 형태로 변화 시켜 위치 인식과 특징점 맵을 구성하는데 필요한 계산량을 줄이는 방법을 제안한다. 두 번째로 청소로봇에 사용하는 센서들의 성능이 매우 제한적이다. 청소 로봇에 가장 많이 사용되는 센서는 초음파 센서와 적외선 센서이다. 초음파 센서의 경우에는 로봇의 크기나 구조적인 문제 때문에 측정 범위가 제한되고, 적외선의 경우엔 비용 문제와 센서 자체가 가지고 있는 측정 범위에 대한 문제에 의해 근거리 측정용 센서만을 사용한다. 이러한 센서들의 성능을 고려한 특징점 추출 방법을 설명하고 이를 이용한 맵 구성과 청소 영역 분할에 대한 방법을 제안한다. 본 논문에서 제안된 전 영역 청소를 위한 알고리즘들은 실제 판매되는 청소 로봇에 적용하여, 그 성능을 검증한다.

백준 14503 로봇 청소기 C풀이

문제에서 제시한 조건만 지켜서 탐색하면 완료되는 문제이다.

단, 처음 로봇방향을 제시하고, 로봇 방향기준 왼쪽부터 순차대로 탐색해야하므로 다음 탐색할 장소와

로봇 청소기 방향에만 신경써주자.

혹시 에러가 뜬다면 맵 크기나 범위 제한을 잘 해주자.

또한 종료조건이 단 하나 뿐인 것도 유념해두자.

전체 코드

#include int N, M; int Map[51][51]; int visited[51][51]; int r, c, d; int dy[] = { -1,0,1,0 }; // 0 : 북 1 : 동 2 : 남 3 : 서 int dx[] = { 0,1,0,-1 }; //d 기준 왼쪽은 d-1; int move() { int cnt = 0; int left = d-1+(d-1<0?4:0); int repeat = 0; while (1) { //printf("cnt %d left %d repeat %d r : %d c: %d ", cnt, left, repeat, r, c); //4방향 다 청소할게 없을 경우 if (repeat >= 4) { left= d – 2 + (d – 2 < 0 ? 4 : 0); //뒤로 이동하려는데 벽일 경우 종료 if (Map[r + dy[left]][c + dx[left]]) break; //뒤로이동 r += dy[left]; c += dx[left]; //초기화 repeat = 0; left = d - 1 + (d - 1 < 0 ? 4 : 0); continue; } //만약 청소한 적이 없는 곳이라면 청소 if (!visited[r][c]) { visited[r][c] = 1; cnt++; } //청소기 방향 기준 왼쪽 탐색 int ny = r + dy[left]; int nx = c + dx[left]; //범위 안일 경우 if (ny < N && ny >= 0 && nx < M && nx >= 0) { //청소한 곳이라면 방향만 돌림 if (visited[ny][nx]) { left = left – 1 + (left – 1 < 0 ? 4 : 0); repeat++; continue; } //벽이여도 방향만 돌림 if (Map[ny][nx]) { left = left - 1 + (left - 1 < 0 ? 4 : 0); repeat++; continue; } //갈 수 있는 곳이라면 이동 r = ny; c = nx; d = left; repeat = 0; left = d- 1 + (d - 1 < 0 ? 4 : 0); } //범위 밖일 경우청소기 방향돌림 else { left = left - 1 + (left - 1 < 0 ? 4 : 0); repeat++; continue; } } return cnt; } int solve() { int ret = 0; ret = move(); return ret; } int main() { scanf("%d %d", &N, &M); scanf("%d %d %d", &r, &c, &d); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { scanf("%d", &Map[i][j]); } } int ans = solve(); printf("%d", ans); }

키워드에 대한 정보 로봇 청소기 알고리즘

다음은 Bing에서 로봇 청소기 알고리즘 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [삼성 SW 역량 테스트 기출] 로봇청소기

  • koi
  • 알고리즘
  • 문제해결
  • 코딩테스트
  • coding
  • na982
  • livecoding
  • acmicpc
  • 백준
  • 삼성
  • 삼성전자
  • sds
  • 삼성sds
  • 역량평가
  • SW 역량평가
  • SW역량평가
  • 취업
  • 로봇청소기
  • 로봇
  • 청소기
  • 로봇 청소기
[삼성 #SW #역량 #테스트 #기출] #로봇청소기


YouTube에서 로봇 청소기 알고리즘 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [삼성 SW 역량 테스트 기출] 로봇청소기 | 로봇 청소기 알고리즘, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  남자 가 여자 어깨 에 손 | 남자들의 (의미있는/의미없는) \"스킨십의 차이\" 상위 87개 답변

Leave a Reply

Your email address will not be published. Required fields are marked *