CODING/스파르타 내일배움캠프 TIL

13_코트카타_팀 프로젝트 발표, 피드백, 회고_학습법 특강_자바의 정석 객체지향_24.12.30(월)

codingTrip 2024. 12. 30. 20:39

코트카타

13) 자릿수 더하기

나의 풀이

import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        int a = 0;
        int b = n;
        
        for(int i=(int)(Math.log10(n)+1);i>=0;i--){
            answer += b / Math.pow(10,i);
            b = b % (int)Math.pow(10,i);
        }

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println(answer);

        return answer;
    }
}

해당 숫자의 제일 큰 자리수를 구해서 거기서부터 10의 n승으로 나눠서

몫은 answer에 더하고

나머지는 다시 저장하는 방법으로 했다.

 

다른 분들의 풀이

import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;

        while(true){
            answer+=n%10;
            if(n<10)
                break;

            n=n/10;
        }

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("Hello Java");

        return answer;
    }
}

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12931/solution_groups?language=java

while문을 사용하셨다. 나와는 반대로 몫이 아닌 나머지를 answer에 더하셨다.

n<10 조건까지 걸어주셨다. 코드가 더 간결해진 것 같다. 

 

14) 약수의 합

나의 풀이

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i=1;i<=n;i++){
            if(n%i==0){
                answer += i;
            }
        }
        return answer;
    }
}

i라는 변수를 주고 그 변수의 값이 n이하일 때만 for문이 돌아가게 풀었다.

그리고 n을 i로 나눴을 때 나머지가 0인 경우에만 i의 값을 answer에 더하게 했다.

 

다른 분들의 풀이

class SumDivisor {
    public int sumDivisor(int num) {
        int answer = 0;
    for(int i =1 ; i<=num/2;i++){
      if(num%i==0){
        answer+=i;}}


        return answer+num;
    }

출처:https://school.programmers.co.kr/learn/courses/30/lessons/12928/solution_groups?language=java

입력된 숫자의 나누기 2만 하면 된다는 점이 기발한 아이디어라고 생각한다.

코딩 문제를 잘 풀기 위해서는 수학 자체도 잘해야 유리하다는 것을 깨닫게 되었다. 

 

15) 나머지가 1이 되는 수 찾기

나의 풀이

class Solution {
    public int solution(int n) {
        int answer = 0;
        
       for(int i=n;i>0;i--){
            if(n%i==1){
                answer = i;
            }
        }
        return answer;
    }
}

나는 for문을 이용해서 변수 i가 n부터 시작해서 점점 작아지면서

n을 i로 나눈 나머지가 1인 값을 찾고자 했다.

 

다른 분들의 풀이

class Solution {
    public int solution(int n) {
        int answer = 1;

        while(true) {
            if (n%answer==1) break;
            answer++;
        }

        return answer;
    }
}

출처:https://school.programmers.co.kr/learn/courses/30/lessons/87389/solution_groups?language=java

나는 while문이 for문에 비해 익숙하지 않아서 이번에 시도하려다가 결국 for문을 사용했다.

answer 초기값을 1로 주셨구나... 제일 작은 수라는 문제가 주어졌으니 1부터 천천히 올라가는 방법도 괜찮아 보인다.

 


팀 프로젝트 발표, 피드백, 회고

우리 조는 6조였다.

https://codingtrip-it.github.io/sparta/

내 개인적인 생각으로는 정말 소통도 잘 되고, 좋았다고 생각한다.

 

튜터님 피드백

멤버의 아이디에 따라 html파일이 나뉘어져있는데, 

이렇게 하기보다 공통의 페이지를 만드는게 일반적으론 더 맞는 방법이지만, 

첫 프로젝트 특성상 6조 분들처럼 한 것도 개개인의 노력이 돋보여 좋은 것 같습니다. 

기능적으로는 흠 잡을 곳 없이 너무 잘 구현해주셨습니다. 

왼쪽 상단에 '팀소개', '팀원카드', '방명록'을 클릭하면 해당 섹션으로 이동하는 기능도 멋지네요.

 

깃 커밋도 다같이 참여하여 남겨주신 점도 협업이 잘 되었다는 증거라고 생각합니다. 

고생하셨습니다.

 

모든 기능 정상적으로 동작하는 것 같습니다.

모두 많은 것을 느낀 것 같습니다.

쿼리 스트링, 로컬 스토리지 비교하신 부분 발표자료를 보았습니다.

나중에 프론트엔드 개발자와 협업하실 때 도움될 것입니다.

 

[개선할 점]

README를 좀 더 잘 작성해주시면 좋지 않았을까 싶습니다.

 

[질문]

협업 시 pull request를 어떻게 활용하면 좋을까요?

다른 브랜치에서 메인 브랜치에서 병합할 때 요청이 옴

누가 이 코드를 작성했는지 보면서 코드리뷰 가능

코드를 병합할 때 미리 버그나 코드 잘못 합쳐지는 걸 확인가능

6조 KPT 회고

6조 언젠간되겠지

 

1) 한 일

  • 프로젝트 명: 자기소개 웹페이지 만들기
  • 필수 작업: 메인페이지, 개인페이지 등 기본 기능 구현
  • 추가 작업: 방명록 비밀번호 입력 후 수정, 삭제 기능, 멤버 추가 기능

2) 느낀점

  • 윤현호 - 프로젝트를 진행하며 어떠한 로직이나 코드를 짤 때 반드시 이유를 생각하면서 코딩을 진행해야겠다고 느꼈으며 팀장으로서 부담감도 조금 있었고 발표도 정말 떨렸지만 완성도 있게 끝 마친 것에 만족하고 있습니다!
  • 전지호 - 경력이 있는 부분의 주였어서 정말 고민이 많았습니다. 어느 정도까지 내가 진행해야 팀원들의 학습에 방해가 되지 않을까, 여러 기능들을 너무 많이 맡아서 하면 학습의 의미가 사라지는 것 같아서 최대한 작은 부분들만 맡아서 하려했습니다. 팀원분들이 다들 책임감 있게 너무 잘해주셔서 즐거운 주였고 오랜만의 팀활동이어서 정말 즐거웠습니다^^
  • 박은지 - 처음 접하는 개발을 잘할 수 있을지 걱정이 많았으나 팀원들이 함께 도와주어서 어떻게든 해낼 수 있다는 걸 느꼈습니다. 기술, 소통방법 등 하나씩 배워갑니다. 짧은 시간 동안 팀으로 있었지만 이렇게 만날 수 있어서 반가웠습니다.
  • 류성현 - 짧지만 함께 프로젝트를 해내는 과정이 즐거웠고 학습에 대한 열의가 불타는 느낌이였습니다.
  • 조예인 - 처음에는 강의를 넘어선 새로운 기능구현에 대해 혼자서 할 생각을 하니 막막했습니다. 하지만 팀원 분들이 정말 많이 자신의 일처럼 도와주셨고, 이제는 함께 라면 할 수 있다는 자신감이 생겼습니다. 매번 팀플에 당하다가… 이것이 팀프로젝트의 순기능이라는 것을 경험하는 시간이었습니다. 짧은 시간이었지만 좋은 팀원분들을 만날 수 있어 너무 좋았고, 그만큼 내일부터는 변경된다는 사실이 아쉬웠습니다.

1. Keep

  • 서로 질문하고, 격려하고, 적극적으로 피드백 하려고 한 것
  • 안돼도 끝까지 하려고 시도한 것
  • 강의에서 배운 내용 이상으로 새로운 기능 구현에 대해 시도하고 잘 구현해낸 것

2. Problem

1) 문제

  • git hub 브랜치를 쓰지 않고 main 브랜치 하나로 작업 중에 동시에 push를 하다가 충돌이 발생하여 병합하는 부분에 문제가 한 번 있었다.
  • 와이어 프레임을 너무 간단하게 작성했다.

2) 원인

  • git 사용 경험 부족
  • 디자인 감각 부족

3. Try

  1. git hub에 대해서 공부하기
  2. 와이어 프레임 짤 때 피그마를 이용하면 좋을 것 같다.
  3. README 더욱 더 잘 작성하기
  4. 협업 시 Pull request를 더욱 더 적극적으로 활용하면 좋을 것 같다.

다른 팀 발표 중 본받고 싶은 점 

  • 어드민 페이지까지 구현한 팀
  • 리드미가 아름답게 작성된 팀
  • 수정 시 input으로 바꾸는 방법을 사용한 팀

학습법 특강

Not Coder

Be Developer

이 표현이 개인적으로 마음에 들었다.

나의 미래가 되길 바란다.

 

TIL, WIL, 알고리즘

습관화 나의 자산을 만들기

문제인식, 의사결정 과정

(로그 남기기/ 이동욱 - TIL로 전설적이신 분 https://jojoldu.tistory.com)

 

개인과제, 팀과제

배운 내용 복습하며 사고력과 구현력 중점적으로 단련

 

프로젝트

기술적 의사결정 기술적 고민을 동시에

 

개발역량점검표

메타인지, 수료 때까지 도달해야하는 실력 목표

 

큰 그림을 봐야 한다

문제해결능력, 커뮤니케이션

 

왜 기술적인 요구사항이 아닌 자질이나 성향을 보는 걸까요?

문제 발생 시, 원인, 앞으로 발생하지 않기 위해 어떻게 해결하면 좋은지

동문서답하지 않는 것

 

기술적 고민을 잘하려면

로직과 코드에 대한 의도를 생각하기

구현하는 기술, 스택에 목적과 근거 가지기

더 좋은 방법이 있는지 고민하기

 

협업을 잘하려면

예쁘게 말하기(빙글빙글 돌려 말해라)

전달하고자 하는 바를 명확하게 말하기(두괄식 텍스트 2줄, 말은 3초)

데이터 또는 기술적인 근거를 바탕으로 소통하기

우리는 경쟁자보다는 동기

내가 너 한 번 살려준다는 마음으로 질문해주기

 

옳은 말을 기분 좋게 하라 당해낼 자가 없다

 

내일배움캠프 9 to 9 활용법

계속 복습하기

원격 강의 : 개념과 구조 이해 > 이해한 부분 직접 구현하기

실시간 강의 : 완전히 이해하지 못하더라도 집중해서 듣기 > 녹화본으로 복습하기

(이해하지 못한 부분은 메모만 해두고, 계속 듣기, 3회독)

과제 : 과제의 목적은 배운 내용 복습 및 구현 연습, 완성하지 못했더라도 피드백을 받고 부족한 부분 채우기

 

질문과 공유는 우리의 필수 덕목입니다.

  • 질문 : 맥락과 시도한 방법에 대해 설명한 뒤 질문, 튜터/기술매니저/동기 모두에게 적극적으로 질문하고 도움주기
  • 공유 : 답변 받은 내용 질문방에 공유하기, 팀과제나 프로젝트 수행 시 진척도 + 문제점 반드시 공유하기

집중코딩시간에는 몰입해서 코딩만 해주세요.

 

챗 지피티 잘 쓰는 법

1.지피티 보다는 웬만하면 구글링, 공식 문서 확인하라

공식문서를 읽을 수 있는 능력이 제일 중요

만든 사람만이 제일 잘 설명할 수 있다.

2.그럼에도 불구하고 2시간 고민해도 머릿속이 뜬구름일 때 지피티 써보기

소크라테스 프롬프트 방식 사용

(답을 한 번에 알려주지 않는다)

3.: “” “

프롬프트 -> LLM

구분자 잘 사용하기

4.파일첨부 pdf는 텍스트 인식이 잘 안될 수도 있음

텍스트 위주로 하기


자바의 정석- 기초편 - 객체지향

ch6-17~19 메서드호출

메서드 호출

- 메서드를 호출해야 블럭 안의 문장이 수행됨

- 메서드명(값1, 값2, ...);

- 반환값이 있는 경우에는 대부분 작업결과를 저장할 변수를 만듦

- 메서드는 클래스 영역에서만 정의 가능 흐름

 ① 클래스 작성(메서드 작성)

 ② 해당 클래스의 객체생성

 ③ 객체사용(메서드 호출)

메서드는 클래스 안에서 정의된 것

- 메서드의 실행 흐름 : 객체 생성 -> 메서드 호출 -> 작업 결과로 반환 후 자기 호출한 곳으로 돌아감

메서드 호출할 때 작업결과가 없는(반환타입 void) 메서드는 따로 작업 결과를 저장할 필요가 없지만,

작업결과가 있는 메서드를 호출할 경우, 호출한 결과를 사용하고자 하면 작업결과를 저장할 변수가 필요함.

 

ch6-20,21 return문, 반환값

- return : 메소드가 작업을 마쳤을때, 호출한 곳으로 돌아감

- 매개변수, 리턴문의 값 타입이 모두 같아야 함

- void(반환값 없음)인 경우 return 문 생략가능

- 조건문 사용시 참, 거짓에 return문 꼭 넣기

 

ch6-22 호출스택

- 메서드 수행에 필요한 메모리가 제공되는 공간

- 스택 : 밑이 막힌 상자(위에 차곡차곡 쌓임)

- 넣을 때 순서 : 1→2→3

- 꺼낼 때 순서 : 3→2→1

- 중간에 넣거나 중간에 있는 것을 꺼낼 수 없음

- 메서드가 호출되면 호출 스택에 메모리가 할당, 종료시 해제

- 아래 메서드가 위에 메서드를 호출 -맨 위 메서드 하나만 실행 중, 나머지는 대기 중

 

ch6-23 기본형매개변수

주소를 가르키는 (참조변수)가 넘어온다면 값이 변경 , 저장되나 값만 넘어오기에 넘어온 값은 매서드에서 변경후 매서드 종료시 사라짐 참조인지 기본형인지 구분은 void change( O <- 타입으로 결정 , 변수이름)

- 기본형 매개변수 : readonly - 참조형 매개변수 : read & write * 각 예제의 실행흐름에 대해 그림을 그려 설명할 수 있어야 함

기본형 매개변수 : R만 가능 참조형 매개변수 : R/W 가능 영상보고 책 코드(자바의 정석 p.264)만 보면서 그림 그려보니 이해가 더 잘 되네요!

6-23 기본형 매개변수 >기본형 매개변수 : 읽기만 가능 변경불가 >참조형 매개변수 : 읽기 가능 변경 불가 (플래시동영상 보면서 공뷰해보기) 코드보면서 단계별로 스택그리기 공부해보기

기본형 매개변수 -기본형(int, float, char, String, byte, boolean, double, long) 매개변수는 값을 읽기만 할 수 있고(read only), 변경 불가 -예제 코드 한줄한줄 그림 많이 그려서 이해해보기! (전역변수x와 지역변수x를 확실히 구분할 수 있다)

 

ch6-24,25 참조형매개변수, 참조형 반환타입

참조형 매개변수

- 변수의 값을 읽고 변경할 수 있음(read & write)

- 매개변수로 참조형 변수를 전달할 경우 변수가 가리키는 객체의 주소 값이 전달됨

- 매개변수로 전달된 변수와 같은 객체를 가리키기 때문에 값의 변경이 가능함 참조형 반환타입 - 반환 값으로 객체의 주소 값을 전달함

 

출처:https://www.youtube.com/watch?v=oJlCC1DutbA&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp