• 오늘의 계획
    • Inflean을 통한 react 공부하기
      • 수업 소개
        • 공부 전략
        • 개발환경의 종류
        • npm을 이용해서 create react app 설치
        • create react app을 이용해서 개발환경구축
        • 샘플 웹앱 실행
        • JS 코딩하는 법
      • 프로그래머스/백준 사이트에서 알고리즘 문제 풀이(그리디 알고리즘)

  • 오늘의 회고

    • react 정리
      • 리액트에서는 사용자 정의 태그를 Component라고 한다.
        1. 가독성
        2. 재사용성
        3. 유지보수
      • npm은 프로그램을 설치하는, npx는 create-react-app이라는 프로그램을 임시로 설치하고 지우는 차이점이 있다.
        1. npx는 공간 낭비하지 않는다.
        2. 실행할 때 마다 다운로드를 새로 하기 때문에 항상 최신 버전이다.
      • create-react-app을 통해 react-app을 생성하고, npm run start를 통해 실행한다.
      • 처음 실행 시 생기는 public 폴더 속 index.html의 id가 root인 div 태그 안쪽에 리액트를 통해 만든 컴포넌트를 넣도록 약속했다.
        1. 이는 src 폴더의 파일들을 수정함으로 만들 수 있다.
        2. 대부분의 파일을 src 폴더에 넣어야 한다.
        3. 진입 파일은 index.js
        4. 아래의 사진에서 App /이라고 하는 컴포넌트는 실제 구현이 하단의 App.js의 div 태그 전체이다. image
        5. 리액트는 저장을 하면 바로 reload가 된다. image
    • 그리디 알고리즘 문제 풀이 : 큰 수 만들기(프로그래머스 LEVEL 2) image

      • 해결 방법 :
        • 처음에 내장 함수 combination을 import하여 모든 경우의 수로 만든 값을 heapq에 maxHeap의 형태로 넣어 heapq의 heappop을 통해 문제를 해결하고자 하였지만 시간 초과 문제가 발생하여 다른 방식으로 문제를 해결하였다.
        • 그리디 알고리즘을 활용하여 문제를 해결하였는데, 숫자가 담긴 number를 돌며 가장 큰 값이 나올 때 그 위치를 지정한 다음 그 다음 위치부터 다시 값 비교를 하는 형식으로 문제를 해결하였다.
        • 이 때 시간 초과 문제가 발생하여 str형을 int형으로 변환하지 않고 그대로 비교하고, 9라는 값이 나왔을 때 바로 다음 인덱스로 넘어가도록 함으로 문제를 해결할 수 있었다.
      • 코드 :

        def solution(number, k):
            answer = ''
            tempPos = 0
            size = len(number)-k
        
            while(size > 0):
                tempMax = '0'
                if number[tempPos] == '9':
                    tempMax = number[tempPos]
                else:
                    for i in range(tempPos, len(number) - size + 1):
                        if number[i] > tempMax:
                            tempMax = number[i]
                            tempPos = i
                            if tempMax == '9':
                                break
                tempPos += 1
                size -= 1
                answer += tempMax
        
            return answer
        
    • 2문제를 해결하는 것을 목표로 하였으나 1문제 밖에 해결하지 못하였다. 다음부터는 더 열심히 풀어보도록 해야겠다.