일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- National Geography. 예술의전당 한가람미술관3층
- 정보처리기사 #전산직 #정보보안기사 #DB #데이터베이스 #암호학 #가상화 #인터넷 #알고리즘 #자료구조 #파이썬 #소공 #SQL #네트워크 #웹
- 전주역 #국민연금공단 #전산직 #해커스경찰 #기도 #말씀 #예배 #찬양 #국밥 #무궁화호 #용산역 #노량진역
- 책읽는사자
- 태어나는 건 순서가 있지만 천국 가는 건 순서가 없다
- 2023
- 박영선 목사님 #박영선의 기도
- 2021 청년다니엘기도회 #다니엘기도회 #청년 #2021 #첫(처음)
- 코딩테스트
- #가람스나이퍼
- 코레일기출복원 #코레일필기시험 #코레일 #한국철도공사
- 다니엘기도회 #오륜교회 #하나님을자랑하는간증의주인공이되자#말씀#기도#전도#영혼구원#성령님#주님꼐서일하신다#하나님#예수님#성령님
- #이어령 선생님 #지성에서 영성으로
- 정보보안기사 #18회 #정보보안기사필기시험
- 철인 #김다니엘목사님 #세상이감당치못하는사람 #여천전남병원퇴원 #장염 #고열 #입원
- 삼성보안기술포럼
- 6월끝 #7월시작 #상반기끝
- 정보보안기사
- #함께함이 기쁨입니다 #청년 #주안장로교회 #청년
- 크라우드펀딩 #오마이컴퍼니 #첫후원 #후원
- 하버드 감정수업 #HARVADE 감정수업 #하버드 #하버드대학교 #HARVADE UNIVERSITY
- 취준생 #수험생 #공시생#자금#건강#기도
- 정보보안기사 #정보보호론 #사이버 #정보보안기사 필기 #정보보안기사 실기
- #둘로스
- 경찰 #여행 #식사 #교제 #만남 #운동
- #인천신용보증공단 #신용보증공단 #신보 #경영학 #경제학 #일반상식 #한국사
- Tag#이은석#이은석성균관대교수#성균관대#성균관대학교#성균관대SW중심대학사업단장#기술변화#MZ세대#기술혁신#취업#기업#이은석성균관대SW융합대학장
- SSTF
- #두란노 #생명의삶 #12월호 #QT #한눈으로보는성경 #요한계시록
- #소명 #하나님의 시간을 잇는 싸움 # 하나님께 쓰임 받는 시간 #김남국 목사님 #마커스워십 #2023
- Today
- Total
Share Garam's everyday life.
로봇청소기 본문
2018년 상반기 삼성 시험을 대비한다. 컴퓨터공학과에 왔지만 이 공부를 왜 해야 하는지 나에 대해서 너무 몰랐다. 그런데 코딩을 왜 해야 하는지 알고리즘, 자료구조가 왜 중요한지 즉 왜 공부해야 하는지 알았다. 그러다보니 코딩의 중요성 알고리즘의 중요성 자료구조의 중요성을 뼈져리게 느낀다. 이 공부를 할 수록 생각하게 된다. 따지게 된다. 내가 생각한 것을 만들 수 있게 된다. 나에게 생각하게 만들어 줄 수 있는 공부이다. 보람찬다. 계속 소프트웨어 공부를 조금식 진행 해 갈 생각이다. 하면 할 수록 알면 알 수록 재미있다.
* 알고리즘
------------------------------------------------------------------------------
while(1)
청소한다
현 위치(2)로 지정한다.
count++
while(1)
if(회전 수(turn)가 4회 미만 일 시에)
if(왼쪽 0일 시)
로봇 왼쪽 회전 후(turn = 0) 한 칸 전진 후 청소한다로 이동
else
로봇 왼쪽 회전 후(turn++) while문으로 진행
else if(회전 수(turn)이 4회 이상 일 시에)
if(뒤가 벽이 아닌 경우)
로봇 방향 유지 및 로봇 한 칸 후진 후 초기화(turn = 0) 후 while문으로 진행
else
로봇 동작 멈추고 break
------------------------------------------------------------------------------
현재 위치를 청소한다.
for(현재 방향을 기준으로 왼쪽방향부터 탐색 진행)
2-1은 조건 후 실행 그리고 반복
2-2은 조건 후 실행 그리고 반복
2-3은 조건 후 실행 그리고 반복
2-4은 조건 후 실행
1,2번은 '왼쪽 상태가 어떠하면' 이고
3,4번은 '상하좌우상태가 어떠하면' 이에요
1, 2는 회전이 4회 이하여야 하고 3, 4는 회전이 4회 이상 이어여 해
if (d == 1)
return arr[r][c - 1];
else if (d == 3)
return arr[r + 1][c];
else if (d == 2)
return arr[r][c + 1];
else if (d == 0)
return arr[r - 1][c];
else
return 0;
-----------------------------------------------------------------------------------------------------------------------------#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int left(int r, int c, int d, int **arr);
void leftrotate(int *d);
void forward(int *r, int *c, int d);
void backward(int *r, int *c, int d);
int notblock(int r, int c, int d, int **arr);
int main(void) {
int N = 0;
int M = 0;
int r, c, d;
int **arr;
int i, j;
scanf("%d %d", &N, &M);
scanf("%d %d %d", &r, &c, &d);
arr = (int **)malloc(N * sizeof(int *));
for(i = 0; i < N; i++)
arr[i] = (int *)malloc(M * sizeof(int));
for(i = 0; i < N; i++) {
for(j = 0; j < M; j++) {
scanf("%d", &arr[i][j]);
}
}
int count = 0;
int turn = 0;
int flag = 0;
while(1) {
arr[r][c] = 2; //청소했다.
count++;
while(1) {
if(4 > turn) {
if(left(r, c, d, arr) == 0) {
leftrotate(&d);
forward(&r, &c, d);
turn = 0;
break;
}
else {
leftrotate(&d);
turn++;
continue;
}
}
else if (8 > turn) {
if(notblock(r, c, d, arr) == 1) {
backward(&r, &c, d);
turn = 0;
continue;
}
else {
flag = 1;
break;
}
}
}
if(flag == 1) {
flag = 0;
break;
}
}
printf("%d\n", count);
return 0;
}
int left(int r, int c, int d, int **arr) {
if(d == 0) //북
return arr[r][c-1];
else if(d == 1) //동
return arr[r-1][c];
else if(d == 2) //남
return arr[r][c+1];
else if(d == 3) //서
return arr[r+1][c];
else
return 0;
}
void leftrotate(int *d) {
if (*d == 0) //북쪽을 보면
*d = 3; //서쪽으로 방향을 옮긴다.
else if (*d == 1) //동쪽을 보면
*d = 0; //북쪽으로 방향을 옮긴다.
else if (*d == 2) //남쪽을 보면
*d = 1; //동쪽으로 방향을 옮긴다.
else if (*d == 3) //서쪽을 보면
*d = 2; //남쪽으로 방향을 옮긴다.
else
;
}
void forward(int *r, int *c, int d) {
if (d == 0) //북
*r -= 1;
else if (d == 1) //동
*c += 1;
else if (d == 2) //남
*r += 1;
else if (d == 3) //서
*c -= 1;
else
;
}
int notblock(int r, int c, int d, int **arr) {
if (d == 0) { //북
if (arr[r+1][c] == 2) // 뒤를 확인한다. 청소가 됬는지
return 1; // 맞으면 1을 반
else
return 0; // 틀리면 0을 반환
}
else if (d == 1) { // 동
if(arr[r][c-1] == 2)
return 1;
else
return 0;
}
else if (d == 2) { // 남
if(arr[r-1][c] == 2)
return 1;
else
return 0;
}
else if (d == 3) { // 서
if(arr[r][c+1] == 2)
return 1;
else
return 0;
}
}
void backward(int *r, int *c, int d) {
if(d == 0) //북
*r += 1;
else if(d == 1) // 동
*c -= 1;
else if(d == 2) // 남
*r -= 1;
else if(d == 3) //서
*c += 1;
else
;
}
'삼성소프트웨어역량평가(알고리즘)' 카테고리의 다른 글
삼성청년소프트웨어 후기 (0) | 2018.11.05 |
---|