000. 8/26 OT & TIL

‍박태우·2024년 8월 25일

nbc_spring

목록 보기
1/28

캠프 참고사항 정리 (OT)

  • 2주차 : java , 13주차 : kotlin
  • 종강 : 25년 1월 7일
  • intellipic (부트캠프 수료 이후 취업 지원)
  • 점심 : 오후 1시 ~ 2시
  • 저녁 : 오후 6시 ~ 7시
    => 팀별 일정에 따라 이 일정은 변경 가능
  • 프로젝트 챕터에서는 QR 체크 사용 예정 (7주차 이후)
  • 단위 기간 : 시작일로 부터 한달 (절반 이상 결석 불가)
  • 카메라는 꼭 켜두기 (마이크의 경우는 필요에 따라)
  • 팀은 챕터 변경 시 마다 바뀐다.

이번 주 안내사항 (팀 프로젝트)

https://teamsparta.notion.site/Kotlin-Spring-3-docs-e8b7d25c245b41cb9be3baca348e1fad

-> 이페이지에서 발제/특강 자료 가 이번주의 과제

=> 팀 노션에 작성 할 것


Git & Github 뿌시기 강의

1) 리눅스 명령어

  • pwd : 현재 작업 위치를 보여주는 명령어
  • ls : 내 폴더 내부의 폴더 & 파일 목록 조회
  • ls -a: 숨긴 파일 폴더 모두 보여줌 (git 할 때 필요함)
  • cd (change directory) : ls 명령어 에서 확인된 폴더로 이동

    cd ../.. : 두 단계 상위 폴더로 이동

  • mkdir git-lesson : 'git-lesson' 이라는 폴더 (디렉토리를 생성한다.)
  • touch 파일명 : 현재 경로에서 파일 생성

2) git 을 활용한 버전관리

1) git : 코드 변경점을 기록 (버전 관리 도구)
=> 면접용 : 소프트웨어의 변경 사항을 체계적으로 추적하고 통제하는 것

2) github : 온라인 백업 기능 및 팀원과의 코드 공유 및 협업이 용이

3) git 명령어 모음 (1) : (2) 는 2주차에 추가 예정

  • git init : git 초기세팅 , 정확한 프로젝트 폴더(경로) 에서 입력해야한다. (숨겨진 폴더로 .git으로 표시된다. -> 코드 추적 담당)
  • git add 파일명 : 해당 파일 add (모두 저장은 파일명 대신 . 을 사용하면 됨 (현재 위치))
  • git commit -m"메시지 작성' : 어떤 내용에 대한 커밋인지 잘 말해야 한다.
    => git commit 후 저장이 안되는 경우에는 계정 설정이 필요하다. (이메일, 닉네임)
    => add 와 commit 의 차이점 :
    ===> add : 저장 전 저장할 파일 지정
    ===> commit : 저장
  • git status : 저장 여부 확인 하는 명령어
  • git log : 위가 제일 최신 코드 (이전 커밋 로그를 볼 수 있다. 특정 커밋 id 를 이용해 rollback 같은 것을 할 수 있다.)
  • git push origin '브랜치명' : 해당 브랜치에 코드 수정 반영
  • git clone <링크> . : 점을 안붙이면 아래 새로운 폴더가 생성된다. (웬만하면 . 붙이기)
  • git pull origin '브랜치명' : 다른 사람이 변경한 코드 가져오기 (해당 브랜치)

첫 업로드 시 3개의 명령어의 의미

1) git branch -M main : branch 명을 master 에서 main 으로 변경
2) git remote add origin <github 주소> : 원래는 https 로 된 주소를 매번 치는 대신 origin 이라는 이름으로 대신하겠다는 의미
3) git push -u origin main :git push 명렁어만 입력해도 git push origin main 이 되도록 해줌


코드카타

JAVA 코드카타

문제 44번 : https://school.programmers.co.kr/learn/courses/30/lessons/86491

코드 :

class Solution {
    public int solution(int[][] sizes) {
        int answer = 0;
			for (int i = 0; i < sizes.length; i++) {
				if (sizes[i][0] < sizes[i][1]) {
					int tmp = sizes[i][0];
					sizes[i][0] = sizes[i][1];
					sizes[i][1] = tmp;
				}

			}
			int max_1 = sizes[0][0];
			int max_2 = sizes[0][1];

			for (int i = 1; i < sizes.length; i++) {
				if(max_1 < sizes[i][0]) {
					max_1 = sizes[i][0];
				}
				if(max_2 < sizes[i][1]) {
					max_2 = sizes[i][1];
				}
				
			}
			answer = max_1 * max_2;
			return answer;
    }
}

핵심 개념 :

핵심개념은 각 명함의 가로, 세로 크기 정보들을 통해 최대 가로 값을 가지는 명함의 크기와, 최대 세로 값을 가지는 명함의 크기를 구하는 것이 핵심이다. 이를 통해 모든 명함을 넣을 수 있는 지갑의 가로 세로 곱을 구하는 것이 이 문제의 핵심이다. for 문을 통해 모든 명함들에 대해 정렬했으며 특히 가로, 세로 값 중에서 제일 큰 값을 가지는 것을 0번 인덱스에 위치 하도록 하여 카드를 돌려도 로직이 동작 할 수 있도록 하였다.



문제 45번 : https://school.programmers.co.kr/learn/courses/30/lessons/12926

코드 :

class Solution {
    public String solution(String s, int n) {
       String answer = "";
			char[] data = s.toCharArray();
			for (int i = 0; i < data.length; i++) {
				if(Character.isLowerCase(data[i])) {
					data[i] = (char) ((data[i]-'a' + n)% 26 + 'a');
					
				}
				else if(Character.isUpperCase(data[i])) {
					data[i] = (char) ((data[i]-'A' + n)% 26 + 'A');
				}
			}
			
			answer = String.valueOf(data);

			return answer;
    }
}

핵심 개념 :

아무래도 핵심은 어떤 형태로 'Z' 또는 'z' 범위를 초과시에는 다시 'A' 또는 'a' 부터 시작할 것 인지 인것 같다. 주어진 알파벳을 대소문자를 구분하여 'a', 'A' 를 빼고 n을 더함으로서 data[i] 값의 'a' 로 부터의 위치를 대략적으로 파악한다. 예를 들어 data[i] 가 'c'인 경우 'c' - 'a' 값에 더해줄 값인 n을 더하고 그값을 알파벳의 길이인 26으로 나누고 추후에 다시 'a'를 더함으로서 해결하였다.




SQL 코드카타

문제 39번 : https://school.programmers.co.kr/learn/courses/30/lessons/133026

코드 :

SELECT b.INGREDIENT_TYPE ,sum(a.TOTAL_ORDER) as TOTAL_ORDER
from FIRST_HALF a left join ICECREAM_INFO b
on a.FLAVOR = b.FLAVOR
group by b.INGREDIENT_TYPE
order by TOTAL_ORDER;

해결 방법 :

두 테이블 모두에 존재하는 FLOVOR 칼럼에 의견하여 a leftjoin b 를 수행한다. 이후 b 테이블의 INGREDIENT_TYPE 칼럼을 가져오고 a.TOTAL_ORDER 를 b 테이블의 INGREDIENT_TYPE 별로 묶은 그룹마다 sum 을 이용하여 합을 구한다. 이름또한 'TOTAL_ORDER'로 변경한다.
이후 order by 를 이용하여 TOTAL_ORDER 에 대하여 오름차순으로 정렬한다.

결과 :



문제 40번 : https://school.programmers.co.kr/learn/courses/30/lessons/59046

코드 :

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
from ANIMAL_INS
where NAME in ('Lucy', 'Ella', 'Pickle', 'Sabrina', 'Mitty')
order by ANIMAL_ID;

해결 방법 :

in 을 이용하여 NAME 값이 위 처럼 해당 값이 존재하는지 확인하였다. 물론 name = 'lucy' or name = 'ella' ... 이런 식으로 할 수 있지만 그 방법 보다는 위 방법이 간단할 것 같다.
이후 order by 를 통해 ANIMAL_ID 의 오름차순으로 정렬하였다.
in 문을 위와 같이 사용 할 수 있다는 생각을 하게 됨

결과 :




TIL 특강

  • 내가 배운것을 기록하고, 성장하고 활용한다. (기성용)
  • 남들보다 더 열심히 하고 잘한다는 것을 증명하는 수단이다.

=> 기대감을 줄 필요가 있다. 이래야 면접의 기회를 얻을 수 있다. 열심히 쓰는 사람은 손에 꼽는다.

작성법 -> 정답이 없다.

처음에는 하루에 한번 씩 작성하기 -> 더 잘 써볼까 ? -> 꼼꼼히, 제대로 작성하기

TIL 주제 정하기

-> 초기 : 강의 내용 정리 (오늘 배운것, 개념정리, 해당 개념이 필요한 이유, 사용법)
-> 개발 단계 정리 (설치하기, 초기세팅하기, xx만들기, ...)
-> 하루 회고 : 오늘 있었던 일 정리 (프로젝트 소통 오류, 느낀 점, 개선 방안)
-> 문제 해결 과정 (권장) : 발생한 문제가 무엇인지 작성, 발생한 코드 작성, 위 코드에서 문제점을 분석하고 가설을 세운다. 원인과 어떤식으로 해결한지 작성, 느낀 점 및 개선 방안 작성

결론 : 취업 === 증명 (일단 작성하기) -> 발전 시키기 (특히 앞으로의 프로젝트 회고에 정성을 들이기)


팀 프로젝트 진행 상황 (자기소개 페이지)

=> 나의 담당인 댓글 부분 관련 구현 모습이다. 이름과 댓글을 입력하고 작성하기 버튼을 누르면 google firebase 의 db 에 저장이 된다. addDoc, getDocs를 이용하여 db에 데이터를 쓰고, 읽는 과정을 살펴 볼 수 있었던 것 같다.


8/26일 오늘의 소감

-> 본캠프 첫날 12시간이라는 시간은 생각보다 길지도 짧지도 않았던 시간이었던 것 같다. 튜터님께서 설명해주시는 유용한 강의를 통해 내가 몰랐던 내용이나 알아가야 하는 부분을 잘 살펴볼 수 있었던 시간이었던 것 같다. 오랜만에 12시간이라는 시간동안 공부를 한 것 같은데 오랜만인것 치고는 나쁘지 않게 했던 것 같다. (조금 피곤하긴 하다...) 그래도 시작이 반이니만큼 더 열심히 생활하고 TIL 작성 해야 겠다는 생각을 했다. 오늘 배운 TIL 권장 작성 방법을 바탕으로 앞으로 나날이 발전해 나가는 나를 기록 하고 싶다.

profile
잘 부탁드립니다.

0개의 댓글