[Leetcode] 387. First Unique Character in a String

Problem

leetcode Given a string s, return the first non-repeating character in it and return its index. If it does not exist, return -1.

Solution

  • 주어진 문자열에서 반복하지않은 문자를 반환 없으면 -1을 리턴
  • Sol1
    • 주어진문자열의 {문자:개수}를 가지는 dictionary를 구현
    • 주어진 문자열의 반복하여 개수가 1인 문자를 처음 발견 시 리턴

Code

Continue reading

[Python] Pandas DataFrame Basics: How To Perform Indexing And Slicing

Python Pandas DataFrame Basics: How To Perform Indexing And Slicing


1. Introduction

  • pandas는 data analysis를 위한 오픈소스 python 라이브러리
  • spread-sheet같은 data를 아래와 같은 기능을 하도록 지원
    • fast-data loading
    • manipulating
    • aligning
    • mering
    • among other functions
  • pandas의 이런 기능을 잘 이용하기 위해서 pandas는 2가지 새로운 type data를 이용
    1. Series
    2. Dataframe

Series: Pandas series are basically dataset having only one row or one column. Means, if we filter out only one row or only one column from a dataframe, its called “series”.

  • dataframe으로부터 one row or one column을 가지는 dataset

Dataframe: The DataFrame represents your entire spreadsheet or rectangular data, whereas the Series is a single column of the DataFrame.

  • 전체 data를 가짐 반며에 Series는 Dataframe의 one column or one row
  • Dataframe은 Series Object들의 dictionary or collection으로 취급

Dataframe example

example

Series example

  • 위의 dataframe에서 3번째 index를 추출 또는 one row를 추출하면 그것이 series object가 된다

    filtering one row

    series-example

    slicing one column

    ex


2.Dataframe Explained in Detail

2.1 Get the number of rows and columns

  • df.shape은 첫번째 row은 tuple을 반환 그리고 2번째 row부터 column을 반환
  • shape는 dataframe의 attribute이기 때문에 function이나 method가 아님
  • shape[0] : 행
  • shape[1] : 열 test

2.2 Get the column names

  • df.columns method는 dataframe의 column명을 가져옴 df.columns

2.3 Get the dtype of each column

df.dtypes

2.4 Get more information about our data

df.info

2.5 Pandas Type Versus Python Types

type-versus


3. Lookig at columns, rows, cells

data가 너무 많으므로 handling할 경우, subsets of data를 보고 data를 handling한다 —

3.1 Subsetting Columns

3.1.1 Subsetting Columns by name
  • data의 특정 column만 보고 싶은 경우 square bracket를 사용 square.bracket
  • 여러 column을 subset으로 지정 square.bracket.2
3.1.2 Subsetting Columns by Range
  • built-in range function을 활용하여 생성가능
  • 특정 begin and end value값을 지정하여 해당 범위 subset자동 생성

3.2 Subsetting Rows

  • rows은 multiple way로 subset 생성가능 subset.rows
3.2.1 Subset Rows by Index Label : loc
  • loc[integer]를 활용하여 특정 row의 data를 가져옴 loc
3.2.2 Subset Rows by Row Number: iloc
  • iloc는 loc와 유사하지만, row index number를 활용
  • index label이 같으면 ilocloc과 같은 동작으로 사용
  • index label은 row number가 필요

3.3 Mixing it up : Subsetting Multiple rows and colums

  • loc그리고 iloc attribute는 subset of columns, rows, or 둘다 가져 올 수 있음
  • comma의 left : subset의 row values
  • comma의 right : subset의 column values

    df.loc[[rows],[columns]] or df.iloc[[rows],[columns]]

3.3.1 Subsetting columns using loc
  • python slicing syntax을 colon을 사용
  • df.loc[:,[columns]]와 같은 syntax로사용 ex
3.3.2 Subsetting columns uinsg iloc

ex

3.3.3 Slicing Cclumns
  • python slicing syntax ,column은 range syntax와 유사 ex

참고

medium

docs-python

Continue reading

[Python] Pandas - Chunksize

namedtuple

dicionary와 같은 container을 지원. 특정 값에 hash를 적용한 key를 포함. key, idex 둘다 접근 가능. tuple의 성질을 가졌고, tuple은 일반적으로 index로 접근하므로 직관적이지 않음. namedtuple은 field의 key(이름)을 붙여 사용 가능


Access options

  • Access by index : The attribute values of namedtuple() are ordered and can be accessed using the index number unlike dictionaries which are not accessible by index.

  • Access by keyname : Access by keyname is also allowed as in dictionaries.

  • using getattr() :- This is yet another way to access the value by giving namedtuple and key value as its argument.


Conversion Operations

  • _make() : iterable객체를 argument로 넘겨 namedtuple()로 return
  • _asdict() : OrderDict()로 return ( namedtupel()의 mapping된 value로 구성)
  • **(double start) operator : dictionary를 namedtuple()로 변환

Additional Operations

  • _fields : namespace의 모든 keyname을 return
  • _replace() : keyname을 넘겨 value값을 변환

Example

참고

geeks

docs-python

Continue reading

[Python] 3 Key Skills for Handling Modules in Python


3 Key Skills for Handling Modules in Python

Python에서 module은 python code를 포함하는 파일 그것의 .py라는 suffix가 붙음 일반적으로 관련 class또는 function을 모듈에 넣고 전체프로그램을 다른 module로 분리하는것이 좋은 programming practice이다

아래에는 module을 잘 사용하고 관리하기 위한 좋은 3가지 skill에대한 소개


1. Import Python Modules Skillfully

(1) Don’t use an asterisk to import all things at once
  • 모든 모듈을 import할떄 가장 기본적인 방법은 asterisk를 사용하는 것 from module_a import *
  • 그러나 위의 방법은 무엇을 import했는지 불명료하고 bug를 일으킬 가능성이 있음
    • 현재 파일의 name이 다른 imported name과 총동 가능성
    • imported module에 새로운것을 추가하면, 모든 new names은 또한 import된다. name conflict를 일으킬 가능성이 높음
  • 필요한 모듈부분만 import 하는것은 좋은 습관이다

(2) Give it a nickname for convenience

  • datascientist라면 아래코드가 친숙할 것이다
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
  • as keyword를 alias를 줌으로써 긴이름의 module을 더 짧게사용

(2) Use relative imports smartly

  • dots.를 사용함으로써 현재 파일의 상대 경로 모듈을 더 효과적으로 가져옴
    from . import module_a
    from .. import module_b
    
  • single dot은 module_a는 현재 파일의 위치에서 같은 directory에서 import(its’s siblings)
  • two dots은 module_b 현재 파일의 위에서 상대적으로 위의 directory에서 import(it’s parent)

2. Execute Python Moduels as Scripts

  • importing module에다가 또한 우리는 module을 개별적으로 script같이 실행가능
  • 아래는 예시 test.py라는 모듈이 있고 아래 code가 포함 print("Yang Zhou")

terminal에서 module을 실행 시킬때, 아래와 같은 command를 입력 sample

위에 예와 같은이 python을 module이름 앞에 붙여서 실행

  • text.py가 function or class를 포함시 우리는 mainfunction을 포함하여 실행
def output_author(name):
    print(name)

if __name__ == "__main__":
    import sys
    output_author(name=sys.argv[1])
  • module이 다른 module에 import 되면 main function은 실행하지 않으므로 유연성을 제공

2. Manage Python Modules by Packages

  • python package는 다른 module들을 grouping시킴. logically related module들을 package에 넣는것은 좋은 습관 !(blog)[https://miro.medium.com/max/568/1*iy9OaOsJ9nU9OL2r702aBw.png]
  • 위의 예시에서는 blog 그리고 mysite라는 2개의 python package그리고 migration이라는 blog의 sub package가 존재 package를 사용함으로써 프로젝트를 좀더 논리적으로 명확하게 관리가능

참고

medium

docs-python

Continue reading

[Docker] Dockerfile 작성


Dockerfile 작성

  • Dockerfile 명령은 항상 FROM으로 시작. 없으면 이미지가 생성되지 않음
  • 이미지를 생성할때에는 Dockerfile이 있는 딩렉터리에서 docker build명령을사용
    $ sudo docker build --tag example .
    $ sudo docker build --tag pyrasis/example .
    
  • --tag 또는 -t 옵션으로 이미지 이름을 설정 가능

dockerignore

  • dockerfile과 같은 directory에 있는 모든파일을 context라고 함. 이미지 생성시 context를 모두 docker deamon에 전송하므로 필요없는 파일이 포함되지않도록 함
  • context에서 파일이나 directory를 제외하고 싶을떄 .dockerignore파일을 사용

FROM

  • 어떤 이미지를 기반으로 이미지를 생성할지 결정
  • 맨앞에 항상설정
  • image가 local에 있으면 바로 사용하고 없으면, Docker Hub에서 다운로드
  • FROM이 2개이면 2개의 image가 생성

MAINTAINER

  • 이미지를 생성한 사람의 정보를 설정
  • MAINTAINER <작성자 정보=""> ` MAINTAINER Hong, Gildong <gd@yuldo.com>`

RUN

  • FROM에서 설정한 이미지 위에서 스크립트 혹은 명령을 실행
  • FROM으로 설정한 이미지에서 포함된 /bin/sh 실행 파일을 사용

CMD

  • container가 시작되었을때 스크립트 혹은 명령을 실행 docker run명령으로 container 생성하거나 docker start명령으로 정지된 container를 시작할때 실행
  • CMD는 Dockerfile에서 한번만 실행
    ENTRYPOINT를 사용할때
    ENTRYPOINT ["echo"]
    CMD ["hello"]
    
  • CMD [ “ARG1”, “ARG2]는 ENTRYPOING에 설정한 명령에 매개변수를 전달하여 실행
  • Dockerfile에 ENTRYPOINT가 있으면 CMD는 매개변수만 전달. 그래서 CMD는 독자적으로 파일 실행 불가

ENTRYPOINT

  • container가 시작되었을때 스크립트 혹은 명령을 실행 docker run명령으로 container 생성하거나 docker start명령으로 정지된 container를 시작할때 실행
  • ENTRYPOINT Dockerfile에서 한번만 실행
CMD 와 ENTRYPOINT 차이점
  • CMD/ENTRYPOINT는 container가 생성될 때 명령이 실행되는것은 동일하지만, docker run명령에서 동작방식이 다름
  • docker run명령어시 CMD는 무시
  • ENTRYPOINT는 docker run 명령에서 실행할 파일을 설정하면 무시되지 않고, 실행할 파일 설정 자체를 매개변수로 받아서 처리

EXPOSE

  • host와 연결할 포트번호를 설정

ENV

  • 환경변수를 설정
  • 설정한 환경변수는 RUN,CMD,ENTRYPOING에서 적용 ` ENV <환경변수> <값>`

ADD

COPY

VOLUMNE

USER

WORKDIR

Continue reading

[Python] Collection모듈 - namedTuples

namedtuple

dicionary와 같은 container을 지원. 특정 값에 hash를 적용한 key를 포함. key, idex 둘다 접근 가능. tuple의 성질을 가졌고, tuple은 일반적으로 index로 접근하므로 직관적이지 않음. namedtuple은 field의 key(이름)을 붙여 사용 가능


Access options

  • Access by index : The attribute values of namedtuple() are ordered and can be accessed using the index number unlike dictionaries which are not accessible by index.

  • Access by keyname : Access by keyname is also allowed as in dictionaries.

  • using getattr() :- This is yet another way to access the value by giving namedtuple and key value as its argument.


Conversion Operations

  • _make() : iterable객체를 argument로 넘겨 namedtuple()로 return
  • _asdict() : OrderDict()로 return ( namedtupel()의 mapping된 value로 구성)
  • **(double start) operator : dictionary를 namedtuple()로 변환

Additional Operations

  • _fields : namespace의 모든 keyname을 return
  • _replace() : keyname을 넘겨 value값을 변환

Example

참고

geeks

docs-python

Continue reading

[Python] Collection모듈 - OrderedDict

OrderedDict

  • python의 collections 모듈에 존재하는 자료구조인 OrderedDict는 기본 dictionary와 거의 비슷하지만, 입력된 item의 순서를 기억하는 Dictionary class.
  • iterating을 할때, 먼저 추가된 key의 item을 반환
  • 정렬된 dictionary를 만들떄 유용

Method

popitem(last=True)

item을 반환 및 삭제하는 method. popitme()인자인 last=은 True일 경우 LIFO방식으로 값을 반환 및 삭제, False일 경우 FIFO방식으로 값을 반환 & 삭제

move_to_end(key,last=True)

맨 오른쪽(뒤) 또는 맨 왼쪽(앞)으로 이동해주는 메소드. last=True 일 경우 맨오른쪽(뒤) 이동하고 ,False인 경우 맨 앞으로 이동

참고

blog

docs-python

Continue reading

[Leetcode] 146.LRUCache

Background

페이지 교체 알고리즘(page-replacement algorithm or cache replacemnt)

  • 컴퓨터는 보통 주기억 장치인 ram과 보조기억 장치인 hard나 ssd의 대용량 기억장치를 가지고 있음
  • ram이 속도가 빠르기 때문에 보조기억장치로 부터 data를 ram에 저장해놓고 ram에 있는 data를 가지고 빠르게 cpu가 연산을 함
  • ram을 같은 크기의 block으로 구성해서 운용하는데 이 block를 page라고 일컫음
  • 만약 cpu가 계산을 할때 data가 page에 있다면 cache hit, 없을 경우 보조기억장치로부터 data를 page로 옮겨온 후에 계산 하는데 이때를 cache miss라고 일컫음. hit일떄가 miss일떄보다 시간 단축
  • hit와 miss의 시간 차이로 인해 보다 빠른 연산을 위해 page에 여러 정보 중 어떤 정보를 오래 저장해 놓아야 하는지가 매우 중요한 문제. 이때문에 관련 알고리즘들이 존재
  • page-replacement 알고리즘 종류
    • FIFO(First In First Out)
    • LIFO(Last In First Out)
    • FILO(First In Last Out)
    • OPT(OPTimal Page Replacement)
    • LRU(Leastly Recently Used)
    • Coundt-Based
    • LFU(Leastly Frequently Used)
    • MFU(Most Frequently Used)

      LRUCache

  • LRU란 Least Recently Used Algorithm의 약자로 Cache에서 memory를 다루기 위한 알고리즘
  • cache가 사용하는 리소스는 제한되어 있고, 제한된 리소스 내에서 데이터를 빠르게 저장하고 접근할 수 있어야한다
  • 이를 위해 LRU알고리즘은 메모리 상에서 가장 최근에 사용된 적이 없은 cache의 메모리부터 대체하여 데이터를 갱신
  • 이 이론의 가설은 제일 오랫동안 참조되지 않은 데이터를 제거하는 방법 LRUCache

위의 예시는 A-B-C-D-E-D-F를 접근 할때의 알고리즘

Problem

leetcode

Design a data structure that follows the constraints of a Least Recently Used (LRU) cache.

Implement the LRUCache class:

  • LRUCache(int capacity) Initialize the LRU cache with positive size capacity.
  • int get(int key) Return the value of the key if the key exists, otherwise return -1.
  • void put(int key, int value) Update the value of the key if the key exists. Otherwise, add the key-value pair to the cache. If the number of keys exceeds the capacity from this operation, evict the least recently used key.

Follow up: Could you do get and put in O(1) time complexity?

Solving

  • LRUCache를 구현하는데 O(1) Time Complexity로 구현
  • 순서가 있는 OrderedDict로 구현
  • cache를 조회 시 (get)
    • key 존재 시 : 조회한 값을 맨 오른쪽으로 이동 및 값을 return
    • key 미존재 시 : -1를 return
  • cache에 data를 입력 시(put)
    • key 존재 시 : data를 맨 오른쪽 이동(조회 하였으므로)
    • key 미존재 시 :
      • capacity 미만 : 값을 추가
      • capacity 초과 : LRU(Least Recently Used)값을 삭제 및 신규 값 추가

Code

참고

wikipedia page-blog

Continue reading

[Leetcode] 104.Maximm depth of binary tree

Problem

leetcode

Given the root of a binary tree, return its maximum depth.

A binary tree’s maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

Solving

  • BT의 depth를 구하기 위해서 DFS/BFS방법으로 구현
  • BT의 DFS 조회 : node를 방문하는 기준으로 방법이 달라짐
    • 전위 순회(preorder)
      • node -> 왼쪽 -> 오른쪽
    • 중위 순회(inorder)
      • 왼쪽 서브트리 -> node -> 오르쪽 서브 트리
    • 후위 순회(postorder)
      • 왼쪽 서브트리 - > 오른쪽 서브 트리 - > node
  • BT의 BFS 조회
    • from collections import deque를 활용
    • root를 맨처음 queue에 넣고 아래 서브트리를 계속 넣고 조회

Code

참고

Continue reading

[k8s] Components

Kubernetes Components

Kubernetes란

Kubernetes(약어 k8s)란 Container Orchestration 플랫폼이다. container화 된 워크로드/서비스/애플리케이션을 관리하기 이식성 있고, 확장 가능한 오픈 소스 플랫폼. 시스템에 배포 가능한 애플리케이션의 구성 요소가 많아짐에 따라 모든 구성의 요소를 관리를 용이하기 위해 사용.

Continue reading

[Shell] df

DF(Disk Free)

Name

df - report file system disk space usage

Synopsis

df [OPTION]…[FILE]

Description

  • df : displays the amount of disk space availabe on the file system containing each file name argument
  • Disk space is shown in 1K blocks by default
  • df shows the space available on tht file system rather than on the file system containg the device node(which is always the root file system)
  • disk의 남은 용량을 확인

Options

  • -a,–al : include dummy file systems
  • -B,–block-size=SIZE : user SIZE-byte blocks
  • –direct : show statistics for a file instead of mount point
  • -h,–human-readable : print size in human readable format(e.g , 1K 234M 2G)
  • -i,–inodes : list inode information instead of block usage
  • -T,–print-type : print file system type

Example

  • df -TH
  • df -T /home/bastion

Continue reading

[Linux] Linux 종류

Linux란?

리눅스(Linux)는 리누스 토발즈가 커뮤니티 주체로 개발한 컴퓨터 운영 체제입니다. 리눅스(Linux)는 UNIX운영체제를 기반으로 만들어진 운영체제 입니다. 리눅스(Linux)는 유닉스(UNIX)와 마찬가지로 다중 사용자, 다중 작업(멀티태스킹), 다중 스레드를 지원하는 네트워크 운영 체제(NOS)입니다.

리눅스의 원형이 되는 UNIX가 애초부터 통신 네트워크를 지향하여 설계된것처럼 리눅스 역시 서버로 작동하는데 최적화되어있습니다. 고로 서버에서 사용되는 운영체제로 많이 사용되고 있습니다.

Linux특징

  1. 리눅스는 유닉스와 완벽하게 호환가능합니다.

  2. 리눅스는 공개 운영체제입니다. 오픈소스이므로 누구든지 자유롭게 수정이 가능합니다.

  3. 리눅스는 PC용 OS보다 안정이며 보안쪽면에서도 PC용 OS보다 비교적 우수한 성능을 가지고 있습니다.

  4. 리눅스는 다양한 네트워킹 기술을 제공하고 있으며 서버용 OS로 적합합니다.

  5. 배포판이 아닌 리눅스 그 자체는 무료입니다.

Linux 종류

  • 대표적인 계열이 레드햇 계열과 데비안 계열
  • 레드햇 계열 : Redhat, Centos
  • 데비안 계열 : Ubuntu

REDHAT계열

레드햇계열은 레드햇이라는 회사에서 배포한 리눅스를 말합니다. 2003년까지는 오픈소스 라이선스로 진행하다가 이후 상용화되었습니다. 레드햇 리눅스는 배포판 중에서 가장 인기가 많습니다. 커뮤니티가 아닌 회사에서 관리하는 레드햇계열의 리눅스는 다른 리눅스 배포판에 비해 패치가 빠르며 내장되어있는 유틸리티의 양도 많고 관리툴의 성능도 우수합니다. 또 호환성면에서도 나무랄데가 없지요. 여러모로 장점이 많습니다. 레드햇 계열의 리눅스에는 페도라와 센토스가 있는데 오늘날에는 페도라보다는 센토스를 더 많이 사용하는 추세입니다.

CENTOS

CentOS는 Community Enterprise Operating System 의 약자로 Red Hat이 공개한 RHEL을 그대로 가져와서 Red Hat의 브랜드와 로고만 제거하고 배포한 배포본입니다. 사실상 RHEL 의 소스를 그대로 사용하고 있기에 RHEL 과 OS 버전, Kernel 버전, 패키지 구성이 똑같고 바이너리가 100%로 호환됩니다. 무료로 사용 가능하지만 문제 발생시 레드햇이라는 회사가 아닌 커뮤니티를 통해 지원이 되므로 다소 패치가 느린감이 없지않아 있습니다. 특히 서버용 운영체제로 인기가 매우 높으며 서버용으로 리눅스를 운영할 목적이라면 아마 대부분 이 센토스OS를 사용하는것이 대부분일 것입니다.

데비안계열

데비안은 온라인 커뮤니티에서 제작하여 레드햇보다 더 먼저 배포되어 시장을 선점하였습니다. 이 데비안에서 파생되어진 OS를 데비안 계열이라고 부릅니다. 하지만, 자발적인 커뮤니티에서 만드는 배포판이라 전문적인 회사에서 서비스를 했던 레드햇계열에 비해 사후지원과 배포가 늦고 내장 유틸들의 성능이 레드햇계열에 비해 부족한감이 있어 오랫동안 레드햇에 밀렸었습니다. 하지만 현재는 무료 개인사용자 서버용으로 인기가 매우 높으며 최근에는 지속적인 업데이트를 거친 결과 레드햇계열에 비해 결코 성능이나 뒤쳐지지 않습니다. 그리고 넓은 유저층을 가지고 있는 데비안계열은 그 사용법이 온라인 웹사이트나 커뮤니티에 자세히 기술되어 있다는 점이 진입장벽을 낮추어 초보 리눅스유저들이 접근하기 쉬운 OS라고 할 수 있겠습니다.

UBUNTU

영국의 캐노니컬이라는 회사에서 만든 배포판으로 쉽고 편한 설치와 이용법 덕분에 진입장벽이 낮아 초보자들이 쉽게 접근할 수 있으며 데스크탑용 리눅스 배포판 가운데서 가장 많이 사용되어지고있는 배포판입니다. 개인용 데스크톱 운영체제로 많이들 사용합니다., 서버용으로도 기능이 부족하거나 성능이 딸리지는 않습니다만 서버용 리눅스 점유율로 볼때 센토스에 많이 밀리는것은 사실입니다. 서버는 센토스 데스크톱으로는 우분투라고 생각하시면 될듯 하네요.

참조

Continue reading

[Python]Assert

assert(가정설정문)

  • 어떤 조건을 테스트하는 디버깅 보조 도구
Assertions or assert statement are build into python and are a tool for debugging
try to assert its authorityt over the rest of the code wher checking for a condititon specified by the programmer
  • example
    speed라는 변수가 0이상인지를 체크할때, True이면 아무일도 발생 안하고 프로그램 정상실행. condititon이 faile이면 AssertionError를 일으킴
    

일반 예외처리와 다른점?

  • if try except구문을 사용한 예외처리와 다른 역할을 함
  • File Not Found와 같은 예상되는 에러 조건을 검사하기 위해 사용되는 것은 올바른 활용 방식이 아님
  • 예상하지 않은 프로그램의 상태를 확인하기 위해 활용해야함
  • 구문의 조건을 만족하지 않으면 프로그램이 정상적으로 실행되지 않고 종료되는데, 이는 프로그램의 버그가 있다는 것을 의미
  • 런타임 환경이 아닌 디버깅 환경에 도움을 주는 역할

Syntax

  • assert condtition , erroe_message(optional)
  • Parameter
    • condition : the boolean condititon returning true/false
    • error_message : the optional argument to be printed in console in case of Assertion Error
  • assert_stmt ::= "assert" expression1 [",",expression2]
  • expression1은 테스트 조건이고 뒤의 expression2는 테스트조건이 거짓일때 예외의 메시지로 전달
  • 위의 문법을 인터프리터가 해석하는 방식의 수도코드
    if __debug__:
    if not expression1:
      raise AssertionError(expression2)
    
  • Assertion구문은 debug라는 전역변수를 검사
  • 일반적인 상황에서는 항상 참이지만 최적화가 필요한 경우에는 거짓
  • Aseertion구문을 예외처리에 잘못 활용하게되면 코드가 의도한대로 동작하지 않을 수 있음
  • 데이터 유효성을 검증하는데 Assertion구문을 사용하면 안됨!

Where Not Assertions?

assert (    
       speed >= 0,    
       "Speed should be non-negative!"
)
  • tuple 구문의 경우 Non-empty일떄 항상 참을 반환
  • ()구문은 항상 tuple object를 반환 하므로 항상 True 이런경우 조심해야함

  • PYTHON OPTIMIZE ENVIRONMENT 에서는 실행이 불가

참조

Continue reading

[Leetcode] 7.Reverse integer

Problem

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

Solution

1. arithmetic

pop/push 연산을 통하여 마지막 one digit부터 reverse 숫자를 구함. overflow check! 필수

2. string

string으로 표현하여 reverse string을 구함

  • sign 체크
  • reverse string 구함
  • overflow 검사

CODE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import functools
from typing import List
 
 
class Solution:
    def reverse(self, x: int-> int:
        '''
         Runtime : 36ms
         Memory Usage : 14.3MB
         sol :  %연산으로 일의자리수 부터 구하여 reverse 숫자를 구함
        :param x:
        :return:
        '''
        # set variable
        sign = 1
        ans = 0
        
        #  check whether positive and negative
        if x < 0:
            sign = -1
            x = -x
        
        # algorithm for reverse integer
        while x > 0:
            ans = ans * 10 + x % 10
            x = int(x / 10)
        # overflow check
        if ans > 2 ** 31 - 1:
            return 0
        else:
            return sign * ans
    
    def reverse2(self, x: int-> int:
        '''
          string으로  reverse str구하고 sign를 구함
        :param x: x 
        :return: 
        '''
        sign = 1
        if x < 0:
            sign = -1
            x = -x
        # reverse str
        ans = str(x)[::-1]
        ans = int(ans)
        # overflow check
        if ans < -(2 ** 31or ans > 2 ** 31 - 1:
            return 0
        else:
            return -ans if sign == -1 else ans
 
cs

Continue reading

K8s Overview

kuberntes doc

  • 컨테이너 오케스트레이션 엔진 :배포, 스케일링 그리고 컨테이너화된 애플리케이션의 관리를 자동화 해주는
  • CNCF(Cloud Native Computing Foundation) 에서 주관

Continue reading

Pagination