반응형

 

팀스파르타는 '스파르타 코딩 클럽' 을 주축으로 하여 게임, SI 분야로 진출중인 스타트업이다. 채용 프로세스는 다음과 같다.

 

이력서/포트폴리오 제출 -> 1차 면접(비대면) -> 2차 면접, 컬처핏 -> 채용

 

1차 면접은 구글 미팅으로 진행되고 30분 예정이었지만 실제 면접은 15분으로 끝났다.

지원동기

지원동기에 대해서는 항해99와 광고들을 통해 팀스파르타 팀에 대해 알았고, 팀스파르타의 문화와 새로운 도전이 나를 지원으로 이끌었다고 답했다.

 

다른 사람이 나를 소개할 때 어떻게 소개될지?

긍정적이고 책임감있는 사람
나에게 있었던 경험을 소개하며 근거를 제시했다.

 

협업간에 소통의 오류가 있었던 일?

팀원이 업무에 힘들어해서 팀장에게 업무 분담을 다시 해달라고 부탁을했던 경험을 토대로 중간에서 중재자 역할을 맡았다고 말했다.

 

NextJS를 업무에 사용하는데 해본적 있나?

프로젝트를 대부분 리액트로 작성했지만 최근부터 Nextjs 에 대해 배웠고, 리액트로 짤때는 node로 백엔드 까지 작성해서 힘들었는데 Nextjs는 폴더로 페이지를 관리해 더 편리했다.

 

자바스크립트는 싱글 쓰레드 엔진인데 비동기 처리하는 방법은 어떻게 될까?

Promise, Async, Await에 대해 말했으나 이 부분은 비동기를 처리하는 코드이고 엔진이 어떻게 처리하는지에 대한 질문이라 잘모르겠다고 답했다.

 

Array, LinkedList 는 무엇이 다른지?

정적배열, 동적배열으로 다르며 삽입,삭제 및 탐색이 시간복잡도가 어떻고 원소들이 메모리 상으로 어떻게 존재하는지 답했다.

 

가상 메모리는 무엇인지?

가상메모리는 배웠지만 까먹었다고 했다..

 

현재 배우고 있는 기술 중 소개해주고 싶은 기술을 소개해달라

Nextjs에 대해 배우고 있고, 최근에는 알고리즘 위주로 공부해 딱히 없지만, 블록체인에 대해 관심이 많아 퍼블릭 블록체인에 대해 말하고 간단한 예를 들었다.


10분 면접관님이 질문하고 나머지 5분은 내가 궁금한점을 말했다.

  1. 팀스파르타가 여러분야 진출하고 있는데 게임말고도 어떤게 계획되어있나?
  2. 인턴급여는 어떻게되나?

아.. 하나 더 있었는데 기억이 안난다.

아무튼 아직은 기술면접에 대해 준비가 많이 안되어있어 좀 아쉬웠던 면접이다. 결과는 다음주 중으로 알려주신다고 한다. 마음을 비우자.

반응형
반응형

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

 

2146번: 다리 만들기

여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다

www.acmicpc.net

문제 설명

0으로 이루어진 바다위에 떠있는 1로 이루어진 섬.

섬끼리 다리를 지으려고 하는데 가장 짧은 다리를 구하자.

 

인사이트

섬들 중 어느 섬이든 간에 가장 짧은 다리를 만드는 경우를 출력하면 된다.

  1. 전체 BFS 순회를 통해 몇 개의 섬이 있으며 지도에 있는 1이 몇번째 섬에 부분에 해당하는지 파악
  2. 지도를 이중 for loop를 통해 지도 값이 1 인 칸에 대하여 주위 네 개의 면 중 0이 있다면 큐에 넣는다.
    1. 큐에 들어온 좌표를 기준으로 BFS 를 실행
    2. 주위 네 개의 면 중 하나가 0 이면 큐에 push
    3. 주위 네 개의 면 중 하나가 1 이고 다른 섬이면 정답 벡터의 담기
      1. 시작 좌표, 끝 좌표를 이용해 |끝좌표 - 시작좌표| - 1 값을 구해 최소 다리 길이를 구함
  3. 이중 for loop 가 끝나면 정답 벡터의 최솟값을 출력

 

정답 코드

#include <iostream>
#include <vector>
#include <algorithm>
#include<queue>

using namespace std;

int N, M;

int land[101][101];
int land_idx[101][101];
bool visited[101][101];
bool visited_idx[101][101];
int dx[4] = { 1,-1,0,0 };
int dy[4] = { 0,0,1,-1 };
int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);
    vector<int> ans;
    cin >> N;
    //초기화
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            cin >> land[i][j];
        }
    }

    //2차원 배열을 순회하면서 땅이 몇개인지 파악하고 각 행렬의 1이 속하는 땅의 번호를 기입
    int idx = 0;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (visited_idx[i][j])continue;
            if (land[i][j] != 1)continue;
            queue<pair<int, int>> q;
            q.push(make_pair(i, j));
            visited_idx[i][j] = true;
            idx++;
            land_idx[i][j] = idx;

            while (!q.empty()) {
                int y = q.front().first;
                int x = q.front().second;

                q.pop();

                for (int k = 0; k < 4; k++) {
                    int ny = y + dy[k];
                    int nx = x + dx[k];
                    if (ny < 0 || nx < 0 || ny >= N || nx >= N)continue;
                    if (visited_idx[ny][nx])continue;
                    if (land[ny][nx] == 0)continue;
                    q.push(make_pair(ny, nx));
                    visited_idx[ny][nx] = true;
                    land_idx[ny][nx] = idx;
                }
            }
        }
    }


    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (visited[i][j])continue;
            if (land[i][j] != 1)continue;

            queue<pair<int, int>> q;
            //주변에 0이 있는 1인 시작점 찾아서 큐에 넣기
            bool check = false;
            for (int k = 0; k < 4; k++) {
                int ny = i + dy[k];
                int nx = j + dx[k];
                if (ny < 0 || nx < 0 || ny >= N || nx >= N)continue;
                if (land[ny][nx] == 0) {
                    if (land_idx[ny][nx] != land_idx[i][j])
                    {
                        check = true;
                    }
                }
                else {
                    continue;
                }
            }
            //4면 중 하나라도 0이면 큐에 담기
            if (check) {
                q.push(make_pair(i, j));
                visited[i][j] = true;
            } 
            //BFS
            while (!q.empty()) {
                int y = q.front().first;
                int x = q.front().second;

                q.pop();

                bool check = false;
                for (int k = 0; k < 4; k++) {
                    int ny = y + dy[k];
                    int nx = x + dx[k];
                    if (ny < 0 || nx < 0 || ny >= N || nx >= N)continue;
                    if (visited[ny][nx]) continue;
                    //4면 중 하나가 0 이면 큐에 푸시
                    if (land[ny][nx] == 0) {
                        if (land_idx[ny][nx] != land_idx[i][j])
                        {
                            q.push(make_pair(ny, nx));
                            visited[ny][nx] = true;
                        }
                    //4면 중 하나가 1이면 정답 벡터에 푸시
                    }else if (land[ny][nx] == 1) {
                        if (land_idx[ny][nx] != land_idx[i][j]) {
                            ans.push_back(abs(ny - i) - 1 + abs(nx - j));
                            break;
                        }
                    }

                }
            }
            //재탐색을 위한 방문 초기화
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    if(land[i][j] == 0)visited[i][j] = 0;
                }
            }

        }
    }

    cout << *min_element(ans.begin(), ans.end());
}
반응형

'BOJ' 카테고리의 다른 글

[BOJ 2011] 암호코드  (0) 2024.04.21
[BOJ 2531] 회전 초밥  (0) 2024.03.08
[백준 1018번] 체스판 다시 칠하기  (0) 2021.05.03
[백준 11758번] CCW  (0) 2021.04.30
[백준] 순열 & 조합 (Permutation & Combination)  (0) 2021.04.27
반응형

나의 스펙


  • 서울 중위권
  • 학점 : 3.9
  • 프로젝트 경험 : 웹 2, 앱 2, 임베디드 1
  • 어학 : 오픽 IH
  • 자격증 : none
  • 인턴 : none,,

배경


졸업 준비를 하면서 아직 신입 개발자가 되기까지 경험이 부족하다고 생각했고 마침 11기 모집을 하기에 싸피에 지원하게 되었다. 싸피 지원 프로세스는 총 3가지로 나뉜다.

 

진행방법


  1. 지원서 및 에세이 작성
  2. SW적성진단
  3. 인터뷰

3가지 순서로 11기 모집을 한다.

 

지원서 및 에세이 작성


일반적인 회사 공고 자기소개서와는 달리 교육을 목적으로 하는 기관에서의 자기소개이기 때문에 내가 왜 싸피를 들어야하는가? 싸피가 왜 필요한가? 에 대한 고민이 필요한 것 같다. 따라서, 에세이에 싸피가 꼭 필요한 이유 등 어필할 수 있는 내용으로 채워야 한다고 생각한다.

 

질문 향후 어떤 SW 개발자로 성장하고 싶은지 SW 관련 경험을 토대로 기술하고, SSAFY에 지원하신 동기에 대해서도 작성 바랍니다.

에세이는

  • 경험의 부재
  • 싸피가 가져오는 이점

위 두 항목을 기준으로 작성했다.

 

SW적성진단


전공자 입장에서 SW적성진단은 코딩테스트를 치룬다. 비전공자들은 GSAT 같은 시험을 봤다고하는데 정확하지는 않다. 코딩테스트는 꾸준히 문제를 풀어보고 대중적인 알고리즘에 대한 기본 문제를 쉽게 풀 수 있다면 무리없이 통과할 수 있다.

플랫폼은 SWEA 에서 보기때문에 SWEA 에서 제공하는 D1~D3 문제들을 풀어가며 준비를 했다.

위와 같이 준비한 덕분에 코딩테스트는 무난하게 통과했다.

 

인터뷰


인터뷰 대상자가 되면서 제일 먼저 한 일은 스터디를 찾는 것이었다. 면접 및 PT 에 대해서는 1도 준비한 적이 없었기 때문에 혼자 준비하기가 힘들었고, 또 내 개인적인 특성상 강제력 없이는 준비를 잘 안하기 때문에 환경을 조성하기 위해서라도 하려고 했다.

 

인터뷰 준비기간이 되면 오픈채팅방이 하나 생긴다. 그 오픈채팅방에 들어가면 여러 사람들이 면접스터디를 구한다. 거기서 두 개의 면접 스터디를 진행했다.

 

면접 스터디를 진행하면서 주로 PT 에 대해 많이 준비했던 것 같다. 어떤식으로 면접이 진행될지 몰라 구글링을 통해 IT 뉴스를 읽고 내용에 대해 서술하는 방식으로 진행했다. 그리고 다양한 IT 키워드에 대해 개념을 준비했다.

 

면접 준비는 인성 면접으로 준비했고, 에세이에서 질문할 만한 질문리스트를 만들거나 흔히 알려져있는 인성면접 질문 리스트를 이용했다.

인성 관련

  1. 성격의 장단점
  2. 개발자가 되고 싶은 이유
  3. 어떤 개발자가 되고 싶은지
  4. 본인은 리더인지 팔로워인지
  5. 팀을 위해 희생한 경험
  6. 최종적으로 원하는 직무
  7. 실패나 어려움을 겪고 극복한 사례 / 도전정신이 드러나는 사례
  8. 본인의 경쟁력
  9. 마지막으로 할 말
  10. 개발 동아리 / 관련 프로그램을 하시면서 힘들었던 적이 있다면 말씀해주세요
  11. 책임자로써 팀원간의 불화가 있을 때 어떻게 대처할 것인가요?
  12. 협업을 해본 경험이 있나요?
  13. 최근에 읽은 IT 기사를 소개해주세요
  14. 현재 본인의 전공을 선택한 계기가 무엇인가요?
  15. 취업을 하기에 부족하다고 느끼는 이유가 무엇인가요
  16. 팀플을 진행하면서 어려웠던 점이 있나요?
  17. 추후에 개발자가 되었을 때 어떠한 프로그램을 개발하고 싶으신지?

또, 프로젝트 질문도 나올 것 같아 프로젝트에 대한 질문도 준비해 갔다.

 

프로젝트 관련

  1. 프로젝트 내 역활
  2. 개발 과정
  3. 사용기술과 선택 이유
  4. 프로젝트 진행 중 겪은 갈등 상황과 해결 방법
  5. (에세이에 작성한) (’’’) 프로젝트가 무엇인가요?
  6. (에세이에 작성한) (’’’) 프로젝트를 진행하면서 본인이 주도한 역할을 위주로 말씀해주세요.
  7. 프로젝트를 진행하며 기술적인 어려움을 겪은 적이 있었나요? 어떻게 해결했나요?
  8. 기재한 프로젝트 동작과정에 대해 말씀해주세요

 

인터뷰 후기


 

결과는 불합격..

 

면접은 괜찮게 봤다고 생각했지만 역시 진리의 면까몰,, 좀 슬프긴했지만 다음날 인턴 면접이 잡혀있어 정신이 없었다..
하지만, 다음날 면접 준비할때도 30분에 한번씩 결과를 다시 보면서 현실을 부정하기 반복이었다.. ㅋ

 

추가합격이 될거라는 희망을 가지고 기다려보았지만 기회는 없었다. 두개의 면접스터디를 하면서 70%의 스터디원들은 합격한 것 같다. 축하드린다.. 더 열심히 해서 취업 혹은 소프트웨어 마에스트로에 합격하고 싶다..

반응형
반응형

배경

가속도 데이터를 그래프화하여 실제 데이터 값들을 눈으로 확인할 수 있게 하고 싶었다. 하지만, 유니티에서 제공하는 Line Renderer 는 UI 용으로 사용할 수 없었다. 어떻게 하면 UI 에서 그래프를 구현할 수 있을지 구글링 해본 결과 우리 친절하신 외국인 형님들이 만들어 놓은 UI Linerenderer 를 이용하면 해결할 수 있을 것 같았다.

 

UI Linerenderer

https://github.com/Radishmouse22/UILineRenderer

 

GitHub - Radishmouse22/UILineRenderer: UILineRenderer for Unity

UILineRenderer for Unity. Contribute to Radishmouse22/UILineRenderer development by creating an account on GitHub.

github.com

 

깃헙에서 제공하는 UILineRenderer.cs 를 Canvas 의 오브젝트에 적용하면 UI에서도 LineRenderer를 사용할 수 있다.

 

 

Canvas 내의 오브젝트에 해당 스크립트를 아래와 같이 적용한다. 딱히 건드릴 것 없이 스크립트를 코드에 불러와 데이터를 적용하면 된다.

 

 

public UILineRenderer accXLine;
public UILineRenderer accYLine;
public UILineRenderer accZLine;
public UILineRenderer timestamp;

private List<Vector2> accXList;
private List<Vector2> accYList;
private List<Vector2> accZList;
private List<Vector2> timestampList;

 

Manager.cs 의 최상단에 UI Linerenderer를 선언한 변수를 만들어준다.

 

Vector2 accXVec = new Vector3(elapsedTime, accX);
Vector2 accYVec = new Vector3(elapsedTime, accY);
Vector2 accZVec = new Vector3(elapsedTime, accZ);
Vector2 timestamp = new Vector3(elapsedTime, 0f);

accXList.Add(accXVec);
accYList.Add(accYVec);
accZList.Add(accZVec);
timestampList.Add(timestamp);

 

가속도 데이터 값을 받을 때마다 Vector2 를 하나 생성해 List에 삽입한다.

 

//ScrollView 를 위해 width 늘리기
accXLine.rectTransform.sizeDelta = new Vector2(accXList.Count, 100);
accXLine.points = accXList.ToArray();

accYLine.rectTransform.sizeDelta = new Vector2(accYList.Count, 100);
accYLine.points = accYList.ToArray();

accZLine.rectTransform.sizeDelta = new Vector2(accZList.Count, 100);
accZLine.points = accZList.ToArray();

timestamp.rectTransform.sizeDelta = new Vector2(timestampList.Count, 100);
timestamp.points = timestampList.ToArray();

 

운동이 끝나게 되면 가속도 List를 Array 화 하여 points 에 할당한다.

 

 

조잡하지만 데이터를 그래프화하는 방법을 알아보았다.

반응형

+ Recent posts