기술(Tech, IT) 268

[Python] 다중 반복문(multiple loops) 탈출

한 개의 반복문 탈출 시엔 필요한 조건에서 break를 통해 바로 빠져나갈 수 있지만, 다중 반복문에선 그게 불가능하다. 다음은 다중 반복문을 탈출할 수 있는 세 가지 방법이다. 1. flag 사용 : 아래와 같이 flag를 사용한다면 다중 반복문에서 flag를 매 반복문마다 확인해 break를 선언한다면 탈출이 가능하다. i = flag = 0 while i < 5: for j in range(5): if j%2 == 1: print(j) flag = 1 break print(j) if flag == 1: break 실행 결과: 0 1 2. 예외 처리(except) : 아래와 같이 except 처리를 통해서도 다중 반복문을 탈출할 수 있다. class LoopBreak(Exception): pass t..

[Python] pass vs continue vs break

파이썬 알고리즘 문제를 풀던 중 이중 반복문을 탈출하는 방법을 구글링하다 error를 발생시켜 탈출하는 방법을 알게 됐고, 예시에서 pass를 알게 됐다. 다음은 해당 예시다. class LoopBreak(Exception): pass try: for i in range(5): for j in range(5): if i == 1 and j == 1: raise LoopBreak() except LoopBreak: pass W3Schools에 따르면 pass의 정의는 다음과 같다. pass : The pass statement is used as a placeholder for future code. When the pass statement is executed, nothing happens, but y..

[Tech, etc] Python vs Python3

Leetcode 문제를 풀기 위한 언어 선택 중 Python과 Python3 두 가지 옵션이 있어 알아보게 됐다. 기본적으로 모든 Python은 Open Source이고 대부분 GPL-compatible 하다. 실제로 안드로이드 개발 당시 설치했던 파이썬 3.x 버전에선 필요로했던 기능이 동작하지 않아 지우고 2.7 버전으로 재설치했던 일이 있었다. Python 2 1. Python 2.7은 2020년 1월 1일을 마지막으로 더는 지원하지 않음 2. 2000년 Python 2.0이 처음 배포되고 마지막 버전은 2.7로 2010년에 배포 Python3 1. Python 3.0은 2008년 처음 배포됐고, 가장 최신 버전은 현재 3.10.4 2. https://www.python.org/downloads/ ..

[Tech, etc] Primitive recursive function(원시 재귀 함수)

계산 가능성 이론(computability theory)에 따르면, 원시 재귀 함수는 대략적으로 반복문이 모두 "for"문인 컴퓨터 프로그램에 의해 계산되는 함수를 말한다. 원시 재귀 함수는 전역 함수(total function)이자 일반 재귀 함수들로 이뤄진 진부분집합(strict subset, proper subset)을 가진다. 원시 재귀 함수의 중요성은 수학에서 계산 가능한 대부분의 함수들이 원시 재귀라는 것에 있고, 더하기, 나누기, 팩토리얼, 지수 함수가 그 예다. 참고 - Primitivec recursive function(원시 재귀 함수): 반복 수를 알아 for loop 가능 - Recursive function(일반 재귀 함수): 반복 수를 몰라 for loop 불가 ex) 아커만 함..

[Tech, etc.] Ackermann function(아커만 함수)

계산 가능성 이론에 따르면 아커만 함수는 빌헬름 아커만(Wilhelm Ackermann)의 이름을 딴 함수로, 가장 간단하고 먼저 발견된 완전 계산 가능(total computable function) 함수이며 비원시 귀납 함수(not primitive recursive function)이다. 모든 원시 귀납 함수는 완전(total)하고 계산 가능하지만, 아커만 함수는 모든 완전 계산 가능 함수가 원시 재귀 함수는 아니라는 것을 설명한다. 아커만의 발표 이후, 3개의 음수가 아닌 정수를 인자로 갖는 아커만 함수에 대해 많은 사람들이 다양한 목적으로 변형했다. 흔한 예정 하나로는 두 개의 인자를 갖는 아커만 피터 함수(Ackermann-Peter function)이 있는데 음수가 아닌 두 정수 m과 n에 ..

[Android] Soong Build System

Soong이란? : Build 도구 중 하나인 Make를 대체하기 위해 Android 7.0(누가) 때 소개됨. Android의 build 속도를 높이기 위해 Kati GNU Make clone과 Ninja build system component를 사용. Android 7.0 배포 전까지, Android는 build rule을 형성하고 실행하기 위해 GNU Make를 사용. Make build system은 폭넓게 지원되고 사용됐지만, Android의 규모에선 느리고, 오류체 취약하며(error prone), 유연하지 못하며(unscalable), 테스트하기 어렵다. Soong build system은 Android build에 요규되는 유연함(flexibility)를 제공. Make와 Soong 비교..

[Tech, etc.] NP-complete problem(비결정 완전 문제)

NP는 Nondeterminisitic Polynomial-time의 약자로, NP-complete problem은 효율적인 해결 알고리즘이 현재까지 알려지지 않은 계산 문제 중의 하나다. 많은 중대한 컴퓨터 싸이언스 문제들이 이 종류에 속하는데 여기엔 Knapsack problem(배낭 문제), The traveling salesman problem(외판원 문제), Boolean satisfiability problems(충족 가능성 문제)와 Graph coloring problems(그래프 색칠 문제) 등이 있다. 계산 복잡성 이론에 따르면, 다음의 두 조건을 만족할 경우 NP-complete problem이다: 1. 각 해법의 정확함이 빠른 시간 안에 확인이 되고, 모든 가능성 있는 해법을 시도하는..

[Tech, etc.] Architectural smell

Architectural smell은 대개 이해도, 시험 가능성, 확장성, 재활용성과 같은 시스템의 생명주기 특성에 부정적으로 영향을 미치는 아키텍쳐 설계 결정을 뜻한다. An architectural bad smell is a commonly (although not always intentionally) used set of architectural design decisions that negatively impacts system lifecycle properties, such as understandability, testability, extensibility, and reusability. 출처(References) - Toward a Catalogue of Architectural Bad ..

[Android] Lean back mode(린백 모드) - 전체 화면 모드 (2)

Lean back 모드는 전체화면 모드 중 하나로 사용자가 비디오 시청을 하는 등의 화면과의 많은 상호 작용이 없는 시나리오를 지원하는 모드다. 같은 전체 화면 모드인 Immersive, Sticky immersive 모드와의 차이점은 상태표시줄이나 내비게이션 바 같은 시스템 바의 사용을 원하면 화면 아무 곳이나 터치하면 된다. Lean back 모드를 활성화하기 위해선, setSystemUiVisibility() 메소드를 호출해 SYSTEM_UI_FLAG_FULLSCREEN flag와 SYSTEM_UI_FLAG_HIDE_NAVIGATION flag를 전달하면 된다. 시스템 바가 다시 나타날 때, 당신은 다른 적절한 UI를 업데이트하는 콜백을 받을 수 있다. 이는 Responding to UI VIsib..

[Java] JAR(Java Archive)

JAR(Java Archive, 자바 아카이브)는 여러개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷이다. JAR 파일은 실제로 ZIP 파일 포맷으로 이루어진 압축 파일로서, 파일 확장자는 .jar이다. 컴퓨터 사용자들은 JDK에 포함된 jar 명령어를 이용하여 JAR 파일을 만들거나 압출을 풀 수 있다. 또, zip 도구를 사용할 수도 있으나 압축 시에는 manifest 파일이 처음이어야 하는 경우가 있어 zip 파일 헤더의 엔트리 순서가 중요하다. JAR 안에서 파일 이름들은 유니코드 텍스트로 되어 있다. 출처 - https://ko.wikiped..