TIL

TIL_20230502

번잔중 2023. 5. 2. 23:22

오늘 할 일

  • LeetCode 데일리 문제 풀기
  • 원티드 프리온보딩

오늘 배운 것

LeetCode 데일리 문제 풀기

  • 오늘의 문제: 1822. Sign of the Product of an Array(https://leetcode.com/problems/sign-of-the-product-of-an-array/)
  • 문제 조건
    • signFunc(x)라는 함수가 있고, 다음을 반환한다.
      • x가 양수이면 1 반환
      • x가 음수이면 -1 반환
      • x가 0이면 0 반환
    • 정수형 배열 nums가 주어진다. product는 배열 nums에 있는 모든 값의 곱으로 둔다.
    • signFunc(product)를 반환해라.
  • 문제 해결 과정
    • 배열에 있는 값을 전부 곱한다.
    • 그 다음 signFunc(product)를 구한다.
    • 그런데, 배열을 정렬하고 0보다 작아지는 지점을 찾아서 음수의 개수를 세면 1인지 -1인지 판별이 가능하고, 0과 같아지는 경우가 있으면 0으로 반환해줄 수 있다. 그러면 시간복잡도가 더 줄어들지 않을까?
    • 다시 해보자!
    • 된다. 그런데, nums의 길이가 최대 1000이기 때문에 정렬할 필요 없이 탐색하면서 음수가 나올 때마다 1에 -1을 곱해주는 방식도 사용할 수 있다.
  • 정답이 안나오는 코드(곱셈을 이어나가다보면 int의 표현 범위를 벗어난다. long으로 해도 마찬가지)
class Solution {
  public int arraySign(int[] nums) {
      long product = 1L;
      for (int n : nums) {
          product *= n;
          if (product == 0)
              break;
          System.out.println(product);
      }
      return signFunc(product);
  }

  private int signFunc(long x) {
      if (x > 0)
          return 1;
      else if (x < 0)
          return -1;
      else
          return 0;
  }
}

 

  • 수정된 정답 코드
class Solution {
    public int arraySign(int[] nums) {
        int ans = 1;
        for (int n : nums) {
            if (n == 0)
                return 0;
            else if (n < 0)
                ans = -ans;
        }
        
        return ans;
    }
}

원티드 프리온보딩

  • 강사님의 말씀 중에서 제가 느끼기에 중요한 것들 위주로 작성합니다.
  • Load Balancer / Auto Scailing, Redis, CloudFront는 기본으로 설정한다고 생각하자.
  • Redis는 무조건 잡고 가자. 개념이 어렵진 않으니 하루 잡고 쭉 파보자!
  • VPC는 울타리(AWS)를 만들고 집(VPC)을 만들고 그 안에 방(subnet)이 있다. 인터넷을 통해 들어갈 수 있고, 인터넷과 VPC가 소통하도록 하기 위해 Internet Gateway를 통해서 들어간다.
  • AWS API Gateway를 사용하면 가장 앞에서 요청을 받는다. 즉 외부에서 내부 서비스로 접근하는 지점!
  • AWS ELB는 컴퓨팅 리소스의 부하를 분산시켜주는 아주 중요한 서비스이다. 사용률이 낮은 서버를 파악하는 방법은 RR(Round Robin) 방식을 통해 판단하고 분산 처리한다.
  • AWS S3의 경우, 트리거 + AWS Lambda를 통해 이미지를 리사이징할 수도 있다. - 일단 스프링 부트 내장 기능으로 만들어서 해보고, 배우고 나서 만들어보자! → 프로젝트에서 적용해보기!_!
  • AWS CloudFront의 장점은 속도는 높이고, 가격은 내리며, 서버 부하는 줄일 수 있다.
  • CI/CD는 꼭 한번 만들어보자.

느낀점

  • 리트코드 문제는 코드를 작성하다가 안되는 경우를 발견했습니다. 사실 이런 흐름은 코딩테스트에서도 절대 해서는 안되는 행동인데 또 이렇게 됐네요. 앞으로는 꼭 시간복잡도를 먼저 구하고, 값의 표현 범위까지 미리 고려해서 코드를 작성하는 습관을 들이겠습니다.
  • 원티드 프리온보딩의 첫 날이었습니다. 최선을 다해 질문에 답변해주시는 강사님, 열정적으로 질문하는 수강생(+저 포함임ㅋ)들의 시너지가 잘 작용했으면 좋겠습니다.

내일 할 일

  • LeetCode 데일리 문제 풀기
  • 출근 전 자바의 정석 공부하기
  • 코드스테이츠 - Cloud > AWS > S3 내용 노션에 정리하기
  • Heart - 게시판 글 수정 및 삭제 로직 작성하기
  • 운동하기 - 웨이트 트레이닝(컨디션 체크하고 하기)

'TIL' 카테고리의 다른 글

TIL_20230504  (1) 2023.05.04
TIL_20230503  (0) 2023.05.03
TIL_20230501  (0) 2023.05.01
TIL_20230430  (0) 2023.04.30
TIL_20230429  (0) 2023.04.29