[ 221209 ] 위키 작성 소스

최수정·2022년 12월 9일
0

LCS

1. 테이블 만들 이중for문 완성

public class LCS {
    public static void main(String[] args) {
        String str1 = "ABCDCBA"; // 열
        String str2 = "DCABDC"; // 행

        int [][] table = new int[str2.length()][str1.length()];

        for (int i = 0; i < str2.length(); i++) {
            for (int j = 0; j < str1.length(); j++) {
                System.out.printf("i:%s j:%s \n", str2.charAt(i), str1.charAt(j));
            }
        }
    }
}

// 결과
i:D j:A 
i:D j:B 
i:D j:C 
i:D j:D 
i:D j:C 
i:D j:B 
i:D j:A 
i:C j:A 
i:C j:B 
i:C j:C 
i:C j:D 
.
.
.
i:C j:B 
i:C j:A 

2. 테이블 채우고 답 출력하여 완성

기능구현 point

  • 행렬에 빈칸 한 줄씩 추가하기 ➡️ 같은 문자가 연속으로 나오는 case에서 문제 방지
  • 수 비교해서 규칙에 따라 채워주기
    - 다를 때: 위,왼쪽 중 큰거 table[i][j] = Math.max(table[i-1][j] , table[i][j-1])
    - 같을 때: 왼쪽 위 대각선의 수 + 1 table[i][j] = table[i-1][j-1] + 1

🔽 오류

public class LCS {
    public static void main(String[] args) {
        String str1 = "ABCDCBA"; // 열
        String str2 = "DCABDC"; // 행

        int [][] table = new int[str2.length() + 1][str1.length() + 1];
        // 수 비교해서 2차원 배열 채우기
        for (int i = 1; i < str2.length(); i++) {
            for (int j = 1; j < str1.length(); j++) {
                if (i == j) Math.max(table[i-1][j] , table[i][j-1]);
                else table[i][j] = table[i-1][j-1] + 1;
            }
        }
        // 출력해보기
        for (int i = 0; i < table.length; i++) {
            System.out.println(Arrays.toString(table[i]));
        }
    }
}

// 결과
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 1, 1, 1, 1, 0]
[0, 1, 0, 2, 2, 2, 2, 0]
[0, 1, 2, 0, 3, 3, 3, 0]
[0, 1, 2, 3, 0, 4, 4, 0]
[0, 1, 2, 3, 4, 0, 5, 0]
[0, 0, 0, 0, 0, 0, 0, 0]

// 의도한 값
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 1, 1, 1]
[0, 0, 0, 1, 1, 2, 2, 2]
[0, 1, 1, 1, 1, 2, 2, 3]
[0, 1, 2, 2, 2, 2, 3, 3]
[0, 1, 2, 2, 3, 3, 3, 3]
[0, 1, 2, 3, 3, 4, 4, 4]

유추 
- 0으로 테두리 쳐진게,, 이상한데  -> for문 길이 잘못지정
- 두 값이 같을 때 비교하는 결과가 이상하다. -> 조건을 반대로 지정함
- 전반적으로 머릿속에 table의 값과 문자열의 값을 지정하는 idx가 머릿속에서 꼬였음 -> 코드를 치기 전에 변수를 확실히 익히고 시작해야 할 것 같음 

🔽 정상코드

public class LCS {
    public static void main(String[] args) {
        String str1 = "ABCDCBA"; // 열
        String str2 = "DCABDC"; // 행

        int [][] table = new int[str2.length() + 1][str1.length() + 1];
        // 수 비교해서 2차원 배열 채우기
        for (int i = 1; i <= str2.length(); i++) {
            for (int j = 1; j <= str1.length(); j++) {
                if (str1.charAt(j-1) == str2.charAt(i-1)) table[i][j] = table[i-1][j-1] + 1;
                else table[i][j] = Math.max(table[i-1][j] , table[i][j-1]);
            }
        }
        // 출력해보기
        for (int i = 0; i < table.length; i++) {
            System.out.println(Arrays.toString(table[i]));
        }
        
        // 답 제출
        int answer = table[str2.length()][str1.length()];
        System.out.println(answer);
    }
}

// result
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 1, 1, 1]
[0, 0, 0, 1, 1, 2, 2, 2]
[0, 1, 1, 1, 1, 2, 2, 3]
[0, 1, 2, 2, 2, 2, 3, 3]
[0, 1, 2, 2, 3, 3, 3, 3]
[0, 1, 2, 3, 3, 4, 4, 4]
4

3. 복습

문제 : https://codeup.kr/problem.php?id=2699
제출 소스코드

package com.algorithm.dinamicPrograming;

import java.util.Scanner;

public class CodeUpDialect {
    public static void main(String[] args) {
        // 입력
        Scanner sc = new Scanner(System.in);
        String input1 = sc.next();
        String input2 = sc.next();
        sc.close();

        // 테이블 생성, 두 문자열 비교
        int [][] table = new int[input2.length() + 1][input1.length() +1];

        for (int i = 1; i <= input2.length(); i++) {
            for (int j = 1; j<= input1.length(); j++) {
                if (input2.charAt(i-1) == input1.charAt(j-1)) {
                    table[i][j] = table[i-1][j-1] + 1;
                } else {
                    table[i][j] = Math.max(table[i-1][j], table[i][j-1]);
                }
            }
        }

        // 답 출력
        System.out.println(table[input2.length()][input1.length()]);
    }
}

GitLab

  • 우리가 벤치마킹 할 건우님의 readme <링크>

주제1. pull request와 merge

pull request란?

  • 작업을 할당 받은 팀원이 branch를 따서 개발한 것을 master branch에 병합(merge) 해달라고 요청하는 것

merge란

  • code review후 master branch에 해당 branch를 반영하는 것

https://youtu.be/3z0zybDvt_8

도메인특강

스티비사의 황민욱 백엔드 개발자님


도메인 지식


⬛ 스티비사의 서비스가 없었을 땐
➡ 기업이 각각 디자인도 하고 자체 서비스를 만들어야 했다.

⬛ 뉴스레터
➡ 예전에는 이메일이 물건을 팔기 위한 프로모션 쯤으로 사용됐는데, 이젠 수단이 아니라 이 자체로 사업이 가능하다.

  • NEWNEEK - 뉴스를 요약해서 보내준다.
  • 순살브리핑 - 금융 관련 정보
  • 등등,,

스타트업이란


⬛ 자유로워서 가고 싶다?
➡ 자유로운 분위기의 대기업을 찾는게 낫다. 자유로움이 목적이라면 좀 더 생각해서 전략적인 계획을 세워보는것이 낫다.

⬛ 스타트업의 장단점
➡ 장점

  • 나의 아이디어로 하고 싶은 일거리를 맘껏 할 수 있다.(일당백)
  • 기술에 대한 여러 제안/설득을 할 수 있다. 그러면 내가 원하는 뭐든지 할 수 있다는 느낌이 있다. (자유로움)

➡ 단점

  • 복지부족
  • 새로운게 자꾸 추가돼서 스트레스가 되는 경우가 있다.

실무를 하면서 도움이 되었던 것들


⬛ 추상화(혹은 일반화 능력)

⬛ 질문하기

  • 신입을 뽑는 이유 - 기존의 사람들이 볼 수 없었던 새로운 시각을 경험하기 위해서

⬛ 메모하기

⬛ 공부하기

  • 엔지니어에게 공부는 숙명적이다!
  • 백엔드 분야 말고도 다양한 분야를 공부해보자. ex) 문학, 인문학, 심리학 등등
    우리가 알고 있는 디자인패턴도 건축학에서 파생되었다!
  • 추천하는 책 ➡ 대부분 심리학책,,!

    특히나, ✨[ 함께자라기 에자일로 가는 길 ]✨

🎤 Q&A


Q. 강사님께선 백엔드 직무를 주로 해오셨다고 했는데, 백엔드를 하면서 다른 직무로 이직을 해보고 싶으셨던 적 있는지, 백엔드라서 특히 힘들다 느꼈던 경험이 있다면 말씀해주세요!

A. 단순 개발보단 PM 같은 윗 단계를 하고 싶다고 생각했었다. Data 분석하는 걸 좋아해서
백엔드라서 힘든 점은, 백엔드 오류는 파장이 큰 경우가 많다(DB가 멈추는 등). 그래서 부담감에 스트레스가 많다 하지만 그런점이 또 안정성을 높일 수 있는 방법에 대한 연구로 이어져 득이 되는 부분도 있다.


Q. 시드 단계나, 시리즈 A 정도 되는 스타트업의 경우에는 신입을 거의 뽑지 않는 것으로 알고 있습니다.
드물게 신입을 뽑는 경우가 있는 것 같은데, 그런 경우 어느 수준의 신입을 기대하는지 궁금합니다.
(코딩 테스트 수준이나 과제 테스트에서 어느 정도를 구현할 수 있는 정도로 설명이 가능할까요?)

A. 천차만별이라 평균을 내기가 힘들다. 굳이 얘기를 해주자면, 해당 기업에서 시작해야 하는 기능을 해본 사람이 있다면 신입이라도 면접까지는 갈 수 있을지 않을까 싶다.


Q. 스티비 같은 경우에는 Golang을 사용하고 있는데 채용 공고를 보니 자바, 파이썬, 고랭중 하나 이상의 언어에 능숙한 사람을 뽑는다고 적혀있습니다.
타 언어를 쓰다가 뽑힌 경우에 교육을 따로 진행하는지, 익숙해질 수 있는 시간을 회사 차원에서 배려해주는지 궁금합니다.

A. 기업마다 케어는 다 다르다. 이유는 언어는 쉽게 바꿀 수 있는 부분이라 생각하기 때문이다. 나(강사님)의 경우 golang 언어를 익히는데 한달~ 한달반이 걸렸다.
익숙해 질 시간은 그래도 보통 한달 정도 주는게 일반적인것 같다. 하지만 교육을 따로 해주진 않을거 같다. 뭘 공부해오라는 코칭 정도 해줄 것 같다.


Q-1. 개발자를 안해봐서 분위기를 모르겠지만 스타트업의 분위기는 어떠한지 궁금합니다.

Q-2. 그리고 이메일 도메인 스타트업에서는 신입으로써의 어떠한 자질(?), 역량을 크게 보는지 궁금합니다 !

A-1. 저희 회사의 경우 자유롭습니다. PM의 아이디어로 새로운 기능을 만들 때, 같이 회의를 하며 가능성 유무 라던지 어떻게 구현할지에 대한 기능적 제안을 서로 많이 하는 편이다.

A-2. 이메일 도메인이라서 특별히 바라는 것은 없고 기존 스타트업이 바라는 역량 정도 일듯하다. ( 스스로 공부를 하려고 하는가, 문제를 해결하는 능력이 있는가, 기존의 직원들과 잘 맞는가 잘 지낼 수 있는가. )


Q. 스티비에서 신입(경력)을 뽑을 때 과제전형이 있던데 어떤 과제전형을 진행했었는지

A. 과제) 병렬처리를 할 수 있는가
경력직) (어떠한)상황에서 문제해결 방안 제시 해주세요.


Q. BtoC 서비스와 BtoB 서비스 개발 프로세스, 근무 환경 등 차이가 있나요?
어떤 차이가 있는지 궁금합니다.

A. 차이가 없다고 생각한다. 하지만 BtoB는 계약서를 쓰고 시작하기에 요구 사항에 대한 기대치가 높고, 좀 더 깐깐하게 확인해봐야한다.


Q. 스타트업을 고르는 기준이 있나요?

A. 돈/복지도 있지만 무엇보다도 흥미로운 서비스에 대한 관심이 많다. 내가 해보고 싶은 서비스를 구현하는게 제일 1순위였다.
그 다음이 안정성을 고려했다. 기업이 망하면 안되니까,, 이러한 부분은 들어가기 전까진 알기 쉽지 않아서 검색을 많이 하면서 정보를 얻었다.


Q. 맛있다 했던 회사 근처 케이크 집이 어딘지

A. https://naver.me/xtWHxAwB , 옵스 소공점이다.


Q. 강사님은 새로운 기술이 나왔을 때 바로 시도해보시는 편인가요~?

A. 아니다. 컴공과였지만 1학년때까지 C언어도 힘들어서 성적이 C가 나오고 그랬다. (어..?CC...?)
하지만 새로운 기술이 나오면 그게 무엇인지 찾아보는 노력정도는 하고 있다. 누군가 새로운 DB를 써봤다 하면 왜 그걸 쓰는지 서치해보고 사람들 의견도 물어보며 대략적인 결론을 내리는것 까진 찾아보곤한다.


Q. 워라밸 만족하시나요?

A. 퇴근을 7시 이전에 다 한다. 주말 출근도 없었다. 본인은 워커홀릭이라 그게 막 좋진 않았다.... 조금 늘어지게 되고 너무 노는거 아닌가 하는 걱정이 들었기 때문이다.
스티비는 워라밸이 과할 정도로 좋았다고 생각한다.


Q. 스타트업 면접을 보실 때, 채용담당자와 이야기를 나누면서 여긴 가지 말아야겠다라고 생각하신 경험이 있으신가요?

A. 많은 분야를 섬렵한 엔지니어가 좋은 성과를 낸다고 생각한다. 그런데 해당 면접 때, 기술 커뮤니티에 핫했던 철학 관련 질문을 역으로 팀장에게 했을 때 아예 모르는 것을 보고 그 분과 일을 잘 할 수 있을까라는 생각이 들었다.
(스타트업의 개발자는 보통 인사부의 면접담당자가 아니라 팀장과 면담하게 된다.)


Q. 지금 잠시 쉬고 계신다고 하셨는데 다음 회사는 어떤 도메인, 또 대기업과 스타트업 중 어느 곳에 흥미가 가나요?

A. 대기업. 대기업을 가본적이 없기 때문에 대기업의 프로세스를 경험해보고 싶다. 스타트업이 좋다고 말하기 위해선 대기업도 경험해봐야 할말이 생기기도 하기 때문이다.
그리고, 도메인은 상관없이 갈것같고 내가 해석할 수 있는 데이터를 많이 보유한 기업에 가보고 싶다.

0개의 댓글