개발일지

2023.12.6 TIL

과일바구니♡ 2023. 12. 6. 16:45

1. 배운내용

   1)알고리즘 코드카타 설명

       - 몫 구하기

        class Solution {
        fun solution(num1: Int, num2: Int): Int {
          var answer: Int = num1/num2
          return answer
          }
      }

    해석: 클래스 솔루션 함수안에서 펌션 솔루션(넘1: 자료형, 넘2:자료형): Int{ var answer: Int = num1/num2

      return answer }로 코드식을 짬. var answer: Int ='0' 에서 num1/num2(/ 나누기) 를 적용하여 결과 값이 나오게 함.

  

-나이구하기

   class Solution {
      fun solution(age:Int): Int {
        var answer: Int = 2022- age +1;
        return answer
      }
  }

해석: 클래스 솔루션 함수안에서 펌션 솔루션(넘1: 자료형): Int{ var answer: Int = 2022- age +1 ;

      return answer }로 코드식을 짬. var answer: Int ='0' 에서 2022- age +1 ; (년도- 나이- +1(조건에 해마다 나이를 하나씩 더함) 를 적용하여 결과 값이 나오게 함.

* 질문을 읽었고 내용은 봤지만, 크드로 작성하는데 이해가 어려웠다. 강의 노션 자료와 블로그 TIL 작성한 것을 보고 여러가지 시도를 했지만 다 에러가 났다... 30분이 지나서  구글에서 문제를 검색하여 코드 작성한 것을 보는데, 어떤 언어인지

표시되지 않고 여러가지 코드들이 작성이 되어있었다.

작성된 여러가지 코드들을 적용해봤지만, 안되고, 그 코드들중에서 공통적으로 나오는 2022- age +1 ; (년도- 나이- +1(조건에 해마다 나이를 하나씩 더함)을 문제를 보며 추론했다. 결론은 원래 주어진 함수( var answer: Int ='0') 에서 0 부분에

공통적으로 나오는 2022- age +1 ; 을 적었고, 코드 실행하니 결과 값이 나왔다.

피드백

**에러 영어는  첫번째 문장등을 파파고등 한글로 해석하여 어디서 에러가 났는지 확인 할 것**

**프로그래머스에서 주어진 틀안에서 코드식을 써서 해결할 것**

**프로그래머스 화면에서 // 치고 주석을 달아 해석해보기- 내가 할 수 있는 만큼**

**문제를 너무 어렵게 접근하지 마세요.**

 

코틀린 강의 3주차를 큰틀에서 듣고,  따라하였다.

2)배운내용

   -메소드: 특정한 로직을 가지는 소스코드에 별명(이름)을 붙이는데, 이름이 붙은 로직은 메소드라고 부릅니다.

        형태

            fun 메소드이름(변수명:자료형, 변수명:자료형 ....) : 반환자료형 { 소스코드 로직 }

     예시코드 

      fun main() {

      var num1 = readLine()!!.toInt()

      var num2 = readLine()!!.toInt()

     // sum이라는 이름의 메소드를 호출!

     sum(num1, num2) }

     fun sum(num1:Int, num2:Int) {

     var result = num1 + num2

     println("num1과 num2의 덧셈결과는 ${result}입니다.") }

 

-클래스: 프로그램에서 필요한 데이터를 추상화시켜 생태와 행위를 가진 객체를 만듭니다.

  (oop) 5대 키워드- 클래스, 추상화, 캡슐화, 상속, 다형성

    참고 자료- 객체지향 프로그래밍

 -클래스 설명 및 구조, 특별한 클래스들

  - 클래스 설명

      프로그램의 각 요소별 설계도라고 해석할 수 있으며. 코틀린에서는 class 키워드를 활용해서 클래스를 만들어요

      클래스에는 정보(프로퍼티)와 행위(메소드)를 작성하며, 보통 하나의 파일은 한개의 클래스를 의미하지만, 하나의 파일안에 여러개의 클래스가 존재할 수도 있어요

 -클래스 구조

        class 클래스이름 {

                  정보1

                 정보2

                 행위1

                  행위2 }

-클래스 모음

  데이터 클래스

    개발하다보면 정보만 가지고 있는 클래스가 필요한데, 데이터 클래스 키워드를 사용하면 간편해집니다.

    기본 생성자에 1개 이상의 매개변수가 변수가 상수로 존재해야 합니다.

    -  종류

  • hashCode(): 객체를 구분하기 위한 고유값을 리턴해줘요
  • eauals(): 동일한 객체인지 비교해서 true 또는 false를 리턴해줘요
  • copy(): 현재 객체의 모든 정보를 복사해서 새로운 객체를 리턴해줘요
  • toString(): 현재 객체의 모든 정보(프로퍼티)를 예쁘게 출력해줘요
  • getXXX()/setXXX(매개변수): 변수의 값을 리턴하거나 설정해줘요
  • 아주 유용한 메소드를 자동으로 생성해줘요

     -클래스 모형

        data class 클래스이름 { 정보1 정보2 }

 

    -실드 클래스 (sealed class)
   클래스 상속과 관련된 개념으로 상속받을 수 있는 자식클래스들을 미리 정의할 수 있습니다.
무분별한 상속을 방지할 수 있으며, 컴파일 시점에 생성할 수 있는 자식을 알 수 있기때문에 효율적으로 다형성을 구현해요
JavaScript
sealed class 부모클래스 {
class 자식클래스1 : 부모클래스생성자
class 자식클래스2 : 부모클래스생성자 }
 -생성자 

  클래스(설계도)를 실체화 할때 최초로 실행할 로직을 작성합니다.

  기본 생성자와 명시적 생성자가 존재 하고, 명시적 생성자는 주 생성자와 부 생성자로 구분이 가능합니다.

  • 한 가지의 형태로 클래스를 실체화할때는 주 생성자를 활용할 수 있어요
  • 여러 형태로 클래스를 실체화할때는 보조 생성자를 활용할 수 있어요
  • <이름, 머리색상, 키> 또는 <이름, 머리색상, 키, 나이, 성별> 처럼 여러개의 생성자를 통해 최초로 코드를 실행할 때는 부 생성자를 이용해요
 

  -실습테스트는 안드로이드 스튜디오에서 실행해보았습니다.

 

3)알고리즘 코드카타 접근 방식/공부방식 강의(박찬규 튜터님) pm7:00~7:40

   알고리즘은 일련의 단계적 절차로, 문제들을 해결하기 위한 동작들의 모임이라고 정의할 수 있다.

  ** 개발이 처음일경우 알고리즘 코드카타를 통해 가장 쉬운 방법으로 동작하는 프로그램을 보며, 성취감등을 느낄수 있다.

   문제가 어려운 것은 당연하며, 30분이상 고민하고 여러가지로 시도해도 에러가 날 경우, 다른사람들이 한 정답들을 보고,

   '왜 그런 코드가 짜여졌는지' 고민하는 것도 중요하다. 이후에 다시 해결을 시도해보는 것도 좋다. 문제를 보다보면

 유사한 문제들이 있으니, 약간의 변형으로 적용할수 있는지 스스로 알아보는 것도 좋은 방법이다.

채용과정에서 알고리즘 코드카타 문제를 내는 의도는 지원자의 순발력, 끈기와 면접관과의 소통하며 의견나누는 스킬을 보는  부분이 있습니다.**

 

  -**문제 접근방식

문제를 보고, 무엇을 해야할지 //로 차례대로 한글로 먼저 적어봅니다.

그후에 //한글 에 대한 코드들을 찾아 한줄한줄 적용되는지 코드결과를 봅니다.

장시간 고민하고 여러가지 시도후에도 안되면,  정답을 보고 '왜 그런 코드가 작성되었는지' 고민하고 해설해보려는 시도가 좋습니다.

 알고리즘 코드카타에서 println("${test}") 코드로 중간에 문제풀이 코드가 잘 작동하는지 확인이 가능하다고 합니다.

 

- **코드 푸는 사이트로는 https://www.acmipc.net/problem/tags BAE /<JOOM> 와 알고리즘 코드카타를 권했습니다.

코드문제 리스트를 출력해서, 형광펜으로 문제 해결한 부분은 그어가며 공부하는 것이 공부한 정도에 대해 눈에 띄게 보인다고 박찬규 튜터님 경험으로 애기했습니다.

코드카타, 백준 사이트 코드 푸는 레벨은 레벨5까지를 권유합니다.

그외에 lntellij Debugmode 프로그램도 있습니다. 요즘은 알고리즘 코드카타가 대세가 되고 있습니다.

 

lntellij Debugmode 프로그램 설명입니다.

 

 

 

2. 오늘 있었던 일

   아침시간에 알고리즘 코드카타를 풀고, 팀원들에 화면공유하면서 제 나름대로 코드 해설을 해보았습니다.

내용은 반복되지만 밑에 붙이겠습니다.

   

 - 몫 구하기

        class Solution {
        fun solution(num1: Int, num2: Int): Int {
          var answer: Int = num1/num2
          return answer
          }
      }

    해석: 클래스 솔루션 함수안에서 펌션 솔루션(넘1: 자료형, 넘2:자료형): Int{ var answer: Int = num1/num2

      return answer }로 코드식을 짬. var answer: Int ='0' 에서 num1/num2(/ 나누기) 를 적용하여 결과 값이 나오게 함.

  

-나이구하기

   class Solution {
      fun solution(age:Int): Int {
        var answer: Int = 2022- age +1;
        return answer
      }
  }

해석: 클래스 솔루션 함수안에서 펌션 솔루션(넘1: 자료형): Int{ var answer: Int = 2022- age +1 ;

      return answer }로 코드식을 짬. var answer: Int ='0' 에서 2022- age +1 ; (년도- 나이- +1(조건에 해마다 나이를 하나씩 더함) 를 적용하여 결과 값이 나오게 함.

* 질문을 읽었고 내용은 봤지만, 크드로 작성하는데 이해가 어려웠다. 강의 노션 자료와 블로그 TIL 작성한 것을 보고 여러가지 시도를 했지만 다 에러가 났다... 30분이 지나서  구글에서 문제를 검색하여 코드 작성한 것을 보는데, 어떤 언어인지

표시되지 않고 여러가지 코드들이 작성이 되어있었다.

작성된 여러가지 코드들을 적용해봤지만, 안되고, 그 코드들중에서 공통적으로 나오는 2022- age +1 ; (년도- 나이- +1(조건에 해마다 나이를 하나씩 더함)을 문제를 보며 추론했다. 결론은 원래 주어진 함수( var answer: Int ='0') 에서 0 부분에

공통적으로 나오는 2022- age +1 ; 을 적었고, 코드 실행하니 결과 값이 나왔다.

피드백으로는 아래와 같이 받았습니다.

그중에서 제가 저에게 피드백한 건 프로그래머스문제에서 주어진 틀안에서 코드식을 써서 해결할 것이였습니다.

**에러 영어는  첫번째 문장등을 파파고등 한글로 해석하여 어디서 에러가 났는지 확인 할 것**

**프로그래머스에서 주어진 틀안에서 코드식을 써서 해결할 것**

**프로그래머스 화면에서 // 치고 주석을 달아 해석해보기- 내가 할 수 있는 만큼**

**문제를 너무 어렵게 접근하지 마세요.**

 

코틀린 강의 3주 큰 틀에서 집중에서 강의들을 들었습니다. 이해가 부족한 부분은... 모르면 다시 듣고, 따라하고, 역할을 보고, 다시 적용해보면서 코드에 대한 이해가 조금씩 늘어갈거라고 생각합니다.

 

이번주 과제인 계산기를 수요일이 되서야 보았는데, 코드를 짜는데 있어서 생각이 많이 필요할 것 같다는 생각이 듭니다.

 

 

'개발일지' 카테고리의 다른 글

2023.12.8 TIL  (0) 2023.12.08
2023.12.7 TIL  (2) 2023.12.07
2023.12.5 TIL  (2) 2023.12.05
2023.12.4 TIL  (0) 2023.12.04
2023.12.2~2023.12.3 TIL  (0) 2023.12.03