본문 바로가기

카테고리 없음

[03/15 모각코 회고]

우리 팀은 금주에 모여 코딩테스트 문제를 하나 골라 한명이 코드 리뷰를 하였다. 또한 현재 프로젝트에서 맡은 역할에 따라서 각자 task를 진행하였다.

모임 개요

  • 장소 : 자율주행스튜디오
  • 참석자 : 임현진, 김찬호, 안상호, 심혜린

Code Review

금주 코딩테스트 문제 - 로봇청소기(백준)

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

 

14503번: 로봇 청소기

첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$  둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽

www.acmicpc.net

#include <iostream>

using namespace std;

int map[50][50];
int visited[50][50];
int N, M;

//위 오 아 왼
int dr[4] = {-1,0,1,0};
int dc[4] = {0,1,0,-1};

void dfs(int r, int c, int d, int sum){ //2번
    
//    1. 현재 위치를 청소한다.
//    2. 현재 위치에서 현재 방향을 기준으로 왼쪽방향부터 차례대로 탐색을 진행한다.
//    a.왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다.
//    b.왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다.
//    c.네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다.
//    d.네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춘다.
    
    
    for(int i = 0; i<4; i++){       //왼쪽부터 반시계방향
        
        int nd = (d+3-i)%4;
        int nr = r + dr[nd];
        int nc = c + dc[nd];
        
        if(nr<0 || nr>=N || nc<0 || nc>=M || map[nr][nc]==1) {  //범위 넘어가거나 벽이면 다음 방향
            continue;
        }
        
        //a.  아직 청소하지 않은 공간이 존재한다면
        if(visited[nr][nc] == 0 && map[nr][nc] == 0){
               visited[nr][nc] = 1; //현재 위치 청소
               dfs(nr, nc, nd, sum+1);
           }

    }
    

    int backIdx = d+2<4 ? d+2 : d-2;
    int backr = r + dr[backIdx];
    int backc = c + dc[backIdx];
    if(0<=backr && backr<=N && 0<=backc && backc<=M){
        if(map[backr][backc]==0){   //뒤쪽 방햑 벽 아니어서 후진할 수 있을 때
            dfs(backr, backc, d, sum);  //한칸 후진
        }
        else{   //뒤쪽 방향 벽이라 후진 못할 때
            cout << sum <<endl;
            exit(0);
        }
    }
      
}



int main(){
    
    int r, c, d;
    cin >> N >> M;
    cin >> r >> c >> d;
    
    for(int i = 0; i<N; i++){
        for(int j = 0; j<M; j++){
            cin >>map[i][j];
            visited[i][j] = 0;
        }
    }
    
    visited[r][c] = 1;
    dfs(r,c,d,1);

    return 0;
}

내용 : 어떻게 문제를 풀었는지, 코드리뷰를 하면서 하나하나 풀이법을 설명했다. 코드리뷰를 하면서 서로의 의견을 공유하고 어떻게 로직을 더욱 효율적으로 바꿀수 있을지 고민해 보았다. 이번 기회에 백트래킹에 대해서 심도있게 공부 할 수 있어서 좋았다.

Meeting

  1. 상호 <->현진

이번 프로젝트에 적용시킬 모델을 탐색하던 중, 상호가 좋은 논문을 찾아서 논문 리뷰 및 모델 소개를 해주었다. One-class Novelty detection 중에서 특이하게 GAN을 사용하여 성능을 끌어올린 OCGAN이라는 모델이다. OCGAN은 간략하게 설명하자면 기존방법에서 GAN을 사용하여 "out-of-class sample은 잘 표현되지 못해야 함"이라는 Novelty detection 필요 조건을 충족시켜주고 latent space 상에서의 문제를 해결해준다는 장점을 가진 모델이다. 

https://arxiv.org/abs/1903.08550

 

OCGAN: One-class Novelty Detection Using GANs with Constrained Latent Representations

We present a novel model called OCGAN for the classical problem of one-class novelty detection, where, given a set of examples from a particular class, the goal is to determine if a query example is from the same class. Our solution is based on learning la

arxiv.org

    2. 현진 <-> 찬호

api를 이용하여 opensea에서 판매되고 있는 NFT 아이템들의 이미지를 어떻게 하면 가져올 수 있을지 의논해보았다. 서로 의논하면서 다양한 방법을 고안했고, 해결방법을 찾을 수 있었다.

 

개별 학습(탐색) 내용

[상호] 

  • latent space autoregression for novelty detection 논문 읽기
  • OCGAN: One-class Novelty Detection Using GANs with Constrained Latent Representations 논문읽기 논문 리뷰 (with 현진)
  • OCGAN 논문 코드 작성중 (pytorch)
  • 현재 task에 model compression이 필요한가에 대한 회의 (with 현진)

[현진]

  • api를 이용하여 NFT 이미지 crawling code 작성
  • NFT 이미지 crawling 자동화에 대한 방법 탐색
  • OCGAN: One-class Novelty Detection Using GANs with Constrained Latent Representations 논문읽기 논문 리뷰 (with 상호)
  • 현재 task에 model compression이 필요한가에 대한 회의 (with 상호)

[찬호] 

  •  기능명세서 작성
  • api 호출 코드 구현 및 전문가와 미팅
  • 이미지 생성 코드 작성 (stable diffusion)

[혜린] 

  • UI/UX 작성
  • 기능명세서 작성