stripe1304의 등록된 링크

 stripe1304로 등록된 네이버 블로그 포스트 수는 51건입니다.

[Android] org.codehaus.groovy.control.multiplecompilationerrorsexception: startup failed [내부링크]

File > Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK를 Embedded JDK로 설정한다.

[Android] Can't determine type for tag '<macro name="m3_comp_assist_chip_container_shape">?attr/shap [내부링크]

에러 내용 Can't determine type for tag '<macro name="m3_comp_assist_chip_container_shape">?attr/shapeAppearanceCornerSmall</macro>' 빌드 에러에 관한 내용이다. 해결 방법은 build.gradle(app)에서 appcompat와 material의 버전을 구버전으로 변경한다. 하지만 추가적인 에러가 발생할 수 있다. 'Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.8.0, expected version is 1.5.1.' 을 해결하기 위해 다른 몇 몇 버전들도 구버전으로 변경해준다. implementation 'androidx.core:core-ktx:1.10.1' implementation 'androidx.appcompat:appcompat:1.6.1' i

[Android] some kotlin libraries attached to this project ~ 에러 [내부링크]

some kotlin libraries attached to this project were compiled with a newer kotlin compiler and can't be read. Please update Kotlin plugin. Gradle에 명시된 라이브러리 버전을 낮춰서 해결한다. dependencies{ ... implementation "androidx.lifecycle:lifecycle-viewmodel:2.3.1" implementation "androidx.lifecycle:lifecycle-livedata:2.3.1" ... }

[알고리즘풀이 with Python] 백준 1446번 - 지름길 [내부링크]

설명 # DP (다이나믹 프로그래밍) : 복잡한 문제를 작은 부분 문제로 나누어 해결하는 방법 지름길의 정보를 입력받습니다. 각 지름길은 시작 위치, 도착 위치, 그리고 길이로 이루어져 있습니다. 지름길의 정보를 시작 위치 기준으로 정렬합니다. 각 지름길에 대해 다음을 수행합니다: 도로의 도착 위치가 고속도로의 끝(D)을 넘어서거나, 지름길의 길이가 실제 거리보다 길면 무시. 그렇지 않으면, 현재 지름길의 시작 위치와 도착 위치를 방문 위치에 추가. 현재 지름길의 시작 위치 이전에, 방문했던 모든 위치의 값을 비교하여, 현재 지름길의 시작 위치까지 가는 거리를 업데이트. 현재 지름길을 따라 도착 위치까지 가는 거리를 업데이트. 현재 지름길의 도착 위치에서 고속도로의 끝(D)까지 가는 거리를 업데이트. 고속도로의 끝까지 가는 최소 거리를 출력합니다. 풀이 import sys input = sys.stdin.readline # N은 지름길의 개수, D는 고속도로의 끝까지의 거리. N,

[운영체제] 버퍼와 캐시: 컴퓨터 성능 향상의 핵심 [내부링크]

컴퓨터 시스템에서 데이터를 처리하는 데 있어서 중요한 역할을 하는 두 가지 요소인 '버퍼'와 '캐시' 에 대해 알아보겠습니다. 버퍼와 캐시의 개념 '버퍼’는 속도에 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할을 하는 장치입니다. 일정량의 데이터를 모아 옮김으로써 속도의 차이를 완화합니다. 반면에, '캐시’는 메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 장소입니다. 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로, CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓습니다. CPU는 메모리에 접근해야 할 때 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾아봅니다. 캐시의 구조와 작동 원리 캐시는 명령어와 데이터의 구분 없이 모든 자료를 가져오는 일반 캐시와, 명령어와 데이터를 구분하여 가져오는 특수 캐시로 구분됩니다. < 일반 캐시 (L2 캐시) > 일반 캐시는 메모리와 연결되기 때문에 L2(Level 2)

[네트워크] TCP의 작업 : 3-Way Handshake에 대한 이해 [내부링크]

TCP (Transmission Control Protocol)는 인터넷에서 데이터를 메시지의 형태로 보내기 위해 사용하는 가장 일반적인 프로토콜 중 하나입니다. 이 프로토콜은 클라이언트와 서버 간에 세션을 설정하는 데 사용되는 특정 절차, 즉 '3-way handshake’를 사용합니다. 3-Way Handshake란? 3-way handshake는 TCP/IP 네트워크에서 두 개의 장치가 통신 세션을 시작하기 위해 교환하는 세 개의 메시지 시퀀스입니다. 이 절차는 신뢰할 수 있는 세션을 초기화하고, 패킷이 손실되지 않고 순서대로 전달되도록 합니다. 3-Way Handshake의 단계 ① SYN: 클라이언트는 초기 시퀀스 번호(ISN) x를 설정하고, 이를 SYN 패킷에 포함하여 서버에 연결 요청을 보냅니다. ② SYN-ACK: 서버는 클라이언트의 SYN 패킷을 받아들이고, 자신의 초기 시퀀스 번호(ISN) y를 설정합니다. 그리고 이를 SYN 패킷에 포함하여 클라이언트에게 보냅니

[Git] 특정 파일을 과거 Commit에서 완전히 삭제하기 [내부링크]

개발을 하다 보면, 과거에 공개해도 됐던 특정 파일을 비공개로 전환해야 하는 상황이 발생할 수 있습니다. 이럴 때, .gitignore에 해당 파일을 추가하더라도, 이미 커밋된 이력에는 해당 파일의 흔적이 남아있습니다. 이러한 문제를 해결하기 위해 Git에서 제공하는 몇 가지 명령어를 사용하여 특정 파일의 흔적을 완전히 지울 수 있습니다. Step 1: .gitignore에 파일 추가 첫 번째 단계는 Git이 향후 커밋에서 해당 파일을 추적하지 않도록 하는 것입니다. 이를 위해 해당 파일의 이름을 .gitignore 파일에 추가합니다. 이 파일은 Git이 무시해야 하는 모든 파일에 대하여 경로를 포함하여 나열합니다. 저의 경우에는 `google-services.json` 파일을 제거했습니다. 이 파일은 Firebase 서비스를 Android 앱과 연동할 때 사용하는 설정 파일입니다. *.iml .gradle /local.properties /.idea/caches /.idea/lib

[Kotlin] NullPointerException 처리하기 [내부링크]

Preview 책 정보를 표시하는 코드를 예로 들어 설명하겠습니다. 다음은 책의 카테고리를 표시하는 코드입니다. Text(text = (book.volumeInfo.categories?.joinToString() ?: "정보 없음"), overflow = TextOverflow.Clip, style = MaterialTheme.typography.caption) book.volumeInfo.categories는 책의 카테고리를 나타냅니다. joinToString() 함수는 카테고리 리스트를 문자열로 변환하며, null일 경우 "정보 없음"을 출력합니다. NullPointerException이란? NullPointerException은 객체 참조가 null인 상태에서 객체의 메서드를 호출하거나, 필드에 접근하려고 할 때 발생하는 런타임 예외입니다. 이는 객체 참조가 null임에도 불구하고, 객체의 실제 인스턴스로의 참조를 시도할 때 발생합니다. 문제 상황 Kotlin에서는 모든 타입이

[Android] 기술 면접 질문 모음 #2 [내부링크]

Q21. 컨테이너(container)에 대해서 설명하시오. A21. 컨테이너는 이름에서 알 수 있듯이 객체와 위젯을 함께 보관하며, 필요한 특정 항목과 원하는 특정 배열에 따라 달라집니다. 예를 들어, 컨테이너에는 레이블, 필드, 버튼 또는 하위 컨테이너가 포함될 수 있습니다. Q22. 오리엔테이션(orientation)에 대해 설명하시오. A22. orientation(방향)은 setOrientation()을 사용하여 설정되며, LinearLayout이 행 또는 열로 나타내는 방식을 결정합니다. HORIZONTAL 또는 VERTICAL로 값이 설정됩니다. 예를 들어, HORIZONTAL로 설정하면 LinearLayout은 수평 방향으로 표시되며, VERTICAL로 설정하면 수직 방향으로 표시됩니다. 이는 안드로이드에서 UI 요소를 배치할 때 매우 중요한 요소 중 하나입니다. Q23. 앱 개발에서 권한 설정이 중요한 이유는 무엇인가요? A23. 권한 설정은 데이터와 코드를 보호하기

[알고리즘풀이 with Python] 백준 2178번 - 미로탐색 [내부링크]

설명 # dp(다이나믹 프로그래밍) n, k 값과 동전들을 입력받는다. 동적 계획법을 위해, k+1 크기의 배열 dp를 선언한다. dp[0]은 동전의 합이 0원일 때의 경우의 수이므로 1로 초기화한다. coins 리스트에 저장된 모든 동전에 대해, 합이 k원이 될 수 있는 경우의 수를 구한다. - coin원짜리 동전으로 k원을 만드는 경우의 수는 dp[k-coin]에 해당. - 따라서, dp[j] += dp[j-coin]으로 갱신한다. 5. 모든 동전에 대해 경우의 수를 구했다면, dp[k]값을 출력한다. 풀이 n, k = map(int, input().split()) coins = [] dp = [0] * (k+1) dp[0] = 1 for i in range(n): coins.append(int(input())) for coin in coins: for j in range(coin, k+1): dp[j] += dp[j-coin] print(dp[k]) 2293번: 동전 1 229

[알고리즘풀이 with Python] 백준 16637번 - 괄호 추가하기 [내부링크]

풀이 N = int(input()) arr = input() def dfs(index, total): global ans if index >= len(op): # 계산이 모두 끝난 경우 ans = max(ans, total) # ans 값과 최근 total 값 비교해서 ans 최신화 return # 메소드 종료 now = calc(total, num_arr[index+1], op[index]) # 현재 index의 연산 진행 dfs(index+1, now) # 다음 index의 연산으로 넘어간다. if index+1 < len(op): tp = calc(num_arr[index+1], num_arr[index+2], op[index+1]) # 다음 index의 연산 진행 now = calc(total, tp, op[index]) dfs(index+2, now) # 다음 index의 연산까지 진행했으니 다다음으로 넘어간다. # 연산 메소드 def calc(a, b, oper): if

[알고리즘풀이 with Python] 백준 2437번 - 저울 [내부링크]

설명 # 누적합 측정할 수 없는 무게의 최솟값이 target일 때, 1부터 target까지 모두 측정이 가능하다. N개의 추를 오름차순으로 정렬한다. 추를 순서대로 확인하며 다음과 같은 작업을 수행. (2개의 조건문을 활용) 현재 추의 무게가 target보다 크다면, target을 만들 수 없는 것이므로 바로 종료한다. 현재 추의 무게가 target보다 작거나 같다면, target에 현재 추의 무게를 더한다. 그러면 1부터 target까지의 모든 무게를 측정할 수 있다. 위의 과정이 2가지로 나뉜다. a. 1번 조건문에 의해 조기 종료가 된다. b. 모든 추에 대해서 확인 후 마친다. a같은 경우는 문제에 주어진 예시와 같은 경우이다. [ 3 1 6 2 7 30 1 ] → 결과 : 21 주어진 추의 최댓값인 30이하에서 결과값이 나온다. 반면에, b의 경우는 다르다. [ 1, 1, 2] → 결과 : 5 주어진 추를 통해 측정할 수 있는 최대값이 4이며, 1~4까지 빠지는 값 없이 측

[네트워크] Transport Layer의 Action - Multiplexing, Demultiplexing [내부링크]

Transport Layer 특징 송신자와 수신자의 프로세스 간에 Logical Communication 데이터 Delay 보장을 확실히 못한다. Bandwidth 보장을 확실히 못한다. 대표적인 프로토콜 : TCP, UDP Transport Layer의 Action Sender 입장 ( = Multiplexing ) ① 소켓을 통해 Application Layer 메시지를 Transport Layer에 전달 ② Transport Layer에서 헤더를 붙여 세그먼트 생성 - 헤더 : 포트 정보 (프로세스 구분 위해) - 바디 : Application Layer의 메시지 ③ 해당 세그먼트를 Network Layer에 전달 ④ Sender의 Network Layer에서 Receiver의 Network Layer로 세그먼트를 전달 Receiver 입장 ( = Demultiplexing ) ① 수신자의 Network Layer로 세그먼트를 전달받은 후, Transport Layer로 세그먼

[네트워크] Principles of reliable data transfer (rdt) [내부링크]

"Reliable" 는 손실나면 재전송, 순서대로 control 을 의미한다. Network Layer 채널과 Transport Layer 채널 Network Layer 채널 : unreliable (패킷 손실, delay 대처 x), best effort 프로토콜 Transport Layer 채널 : reliable 하다. 따라서 unreliable 채널에서의 데이터 손실, delay 문제에 대한 서비스를 Transport Layer에서 제공 RDT의 인터페이스 [송신자 엔드 시스템에서 수행] rdt_send : Application Layer → Transport Layer (메세지 전송) udt_send : Transport Layer → Network Layer (데이터 전송) [수신자 엔드 시스템에서 수행] rdt_rcv : Network Layer → Transport Layer (세그먼트 데이터인 '애플리케이션 메세지 + 헤더'를 전송) deliver_data : Tra

[MySQL] LIKE, SUBSTRING_INDEX 사용하기 [내부링크]

이 글에서는 LIKE 연산자, SUBSTRING_INDEX 함수를 사용하여 원하는 전화번호를 필터링하는 예제를 소개한다. 검색조건 xxx ①- xxxx ②- xxxx ③ 1. 첫번째 파트 ①가 010이 아닌경우 2. 두번째 파트 ②가 세자릿수인 경우 3. 세번째 파트 ③가 세자릿수나 다섯자리 수인 경우 첫번째 방식 : LIKE 연산자 SELECT phone_number FROM phone_numbers WHERE phone_number NOT LIKE '010-%' OR phone_number LIKE '___-___-%' OR (phone_number LIKE '%-___' OR phone_number LIKE '%-_____'); '%' 를 이용하여 조건에 상관없는 부분을 생략할 수 있다. '_' 는 하나의 문자를 의미한다. 이를 이용하여 조건에 맞는 글자수로 조절할 수 있다. 두번째 방식 : SUBSTRING_INDEX 연산자 SELECT phone_number FROM pho

[MySQL] 프로그래머스 문제 - 중성화 여부 파악하기 [내부링크]

중성화된 동물은 SEX_UPON_INTAKE 컬럼에 ‘Neutered’ 또는 'Spayed’라는 단어가 들어있다. 이때 중성화가 되어있다면 ‘O’, 아니라면 'X’라고 표시해야 한다. CASE WHEN ~ THEN ~ ELSE CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE resultN END condition1, condition2, … 은 조건식이며, result1, result2, … 은 각 조건식이 참일 때 반환되는 값이다. ELSE resultN은 모든 조건식이 거짓일 때 반환되는 값이다. 풀이 SELECT ANIMAL_ID, NAME, CASE WHEN (SEX_UPON_INTAKE LIKE 'NEUTERED%' OR SEX_UPON_INTAKE LIKE 'SPAYED%') THEN 'O' ELSE 'X' END AS '중성화' FROM ANIMAL_INS ORDER BY ANIMAL_ID

[Android] 안드로이드 앱의 기본 구조 [내부링크]

안드로이드 앱의 기본구조는 Manifest, 소스코드, 리소스, Gradle script로 구성된다. 1. Manifest (AndroidManifest.xml) AndroidManifest.xml 파일은 앱의 기본 설정과 구성 요소들에 대한 정보를 담고 있다. 앱이 사용하는 하드웨어와 소프트웨어 요구 사항을 정의한다. 이를 통해 Android 운영체제가 앱을 인식하고 실행할 수 있다. 2. 소스코드 (Java / Kotlin) 앱의 기능을 구현하는 코드로, Java 또는 Kotlin 언어로 작성된다. 3. 리소스 앱에서 사용하는 이미지, 문자열, 레이아웃을 관리한다. - drawable : 앱에서 사용하는 이미지 파일이 저장되는 곳 - layout : 화면 레이아웃을 정의하는 xml 파일 - minimap : 앱 아이콘 이미지 파일이 저장되는 곳 - values : 문자열, 색상, 스타일 등의 값을 정의하는 xml 파일이 저장되는 곳 4. Gradle Scripts build.gr

[알고리즘풀이 with Python] 백준 15685번 - 드래곤 커브 [내부링크]

설명 문제에서 제공한 설명 1 문제에서 제공한 설명 2 즉, K(K > 1)세대 드래곤 커브는 K-1세대 드래곤 커브를 끝 점을 기준으로 90도 시계 방향 회전 시킨 다음, 그것을 끝 점에 붙인 것이다. 조건 크기가 100×100인 격자 (격자의 좌표는 (x, y)로 나타내며, 0 ≤ x ≤ 100, 0 ≤ y ≤ 100만 유효한 좌표다.) 드래곤 커브 N개 입력 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20) 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보 (x, y, d, g) x와 y는 드래곤 커브의 시작 점, d는 시작 방향, g는 세대이다. (0 ≤ x, y ≤ 100, 0 ≤ d ≤ 3, 0 ≤ g ≤ 10) 출력 : 크기가 1×1인 정사각형의 네 꼭짓점이 모두 드래곤 커브의 일부인 정사각형의 개수를 구하기 풀이 # 구현 알고리즘 주요 흐름 1. 하나의 드래곤 커브의 모든 세대의 방향 기록 리스트 'move_list'를 사용한다. 2. 'move_list'에 방향

[베이스볼맵 Application] 회고록 part 1-3 : 기술 구현 관련 (Firebase) [내부링크]

part 1 : 기술 구현에 있어 노력한 점 1. Geocode 및 Retrofit2 2. Paging 3. Firebase를 통한 백엔드 구축 출처 : 위키백과 3. Firebase <서비스 관련> 사용한 Firebase의 서비스는 다음과 같다. - Firebase authentication - Firebase realtime database - Firestore - Storage authentication은 signin 및 login 기능 사용을 위해서 사용자의 유저 인증 관리에 사용하였다. realtime database는 사용자 정보, 장소 정보 등을 관리하였다. 비교적 간단한 데이터라면 realtime database에서 관리하는 것이 더 낫기 때문이다. Firestore에서는 게시글, 댓글, 사용자 차단 리스트 등을 관리하였다. 게시글 등을 날짜순대로 불러오거나 한 명의 사용자의가 썼던 게시글을 불러오기 위해서는 쿼리가 깊어야한다. 그래서 정렬 및 필터링 조건문을 동시에

[알고리즘] 다이나믹 프로그래밍(Dynamic Programming) - 설명, 예제 [내부링크]

다이나믹 프로그래밍(Dynamic Programming) :최적화 문제를 해결하는 알고리즘 기법. 점점 긴 길을 걷다보면서 이전에 겪었던 길의 결과를 저장하여 더 짧은 길을 걸을 수 있는 것처럼, 다이나믹 프로그래밍에서는 이전에 계산한 결과를 저장하여 다음에 필요할 때 더 빠르게 계산한다. 마치 쇼핑몰에서 자주 구매하는 상품은 미리 장바구니에 담아두어 다음에 구매할 때 더 빠르게 처리하는 것과 같다. 출처 : DALL-E 예제 - 계단 오르기 주어진 계단을 오르는데 각 계단에서는 1계단 또는 2계단씩만 오를 수 있다. 계단 오르기 경로의 점수의 합의 최대 값을 구하려고 한다. - 계단 점수: (10, 20, 15, 25, 10, 20) 해답 및 설명 with python def climb_stairs(scores): n = len(scores) dp = [0 for i in range(n)] dp[0] = scores[0] dp[1] = max(scores[0] + scores[1]

[알고리즘풀이 with Python] 백준 11727번 - 2×n 타일링 2 [내부링크]

설명 2×n 직사각형을 1×2, 2×1, 2×2 타일로 채우는 방법의 수를 구하는 문제다. 이를 다이나믹 프로그래밍(DP)을 활용하여 풀었다. 초기값으로 dp[0]은 0, dp[1]은 1, dp[2]는 3으로 설정한다. 그리고 점화식을 적용한다. 2×n 크기의 직사각형을 채우는 방법의 수는 3가지다. 1. n-1까지 채운 후, 2×1 타일 하나를 추가하는 경우 2. n-2까지 채운 후, 2×2 타일 하나를 추가하는 경우 3. n-2까지 채운 후, 1×2 타일 둘을 추가하는 경우 따라서, n-1까지 채운 후의 경우의 수는 dp[i-1] 개, n-2까지 채운 후의 경우의 수는 dp[i-2] * 2이다. 이 두 값을 더해서 dp[i]에 저장한다. ※ 문제에서 출력 조건을 보면 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지 값을 출력하라고 되어있다. 그 이유는 수가 매우 커질 경우에는 정확한 값이 나오지 않을 수 있기 때문이다. 풀이 import sys input

[운영체제] 운영체제의 개념 및 역할 [내부링크]

운영체제는 컴퓨터 하드웨어와 응용 프로그램 간의 인터페이스를 제공하며, 시스템 자원을 효율적으로 관리하여 응용 프로그램의 실행을 지원하는 소프트웨어 운영체제는 야구에서의 감독과 비슷한 역할을 한다. 감독은 경기를 이끄는 주체이며, 선수들이 자신의 역할을 수행할 수 있도록 지시하고 관리한다. 마찬가지로 운영체제는 컴퓨터 자원을 관리하고 응용 프로그램이 자원을 효율적으로 사용할 수 있도록 지시하며, 컴퓨터 하드웨어를 이용하여 응용 프로그램들이 실행될 수 있도록 제어한다. - 컴퓨터 자원 : CPU, 메모리, 저장장치, 입출력장치 등

[운영체제] 프로세스의 개념 [내부링크]

운영체제에서의 프로세스는 프로그램 실행을 위해 메모리에 올려진 프로그램의 인스턴스 프로그램이 실행되면 메모리 상에서 프로세스가 생성되며, 프로세스가 운영체제로부터 할당 받은 자원(예: CPU 시간, 메모리 공간 등)을 이용하여 작업을 수행한다. 이것은 일종의 공장 생산라인과 유사하다. 생산라인에 있는 각각의 기계는 각각의 작업을 수행하며, 프로세스들도 마찬가지로 각각의 작업을 수행하면서 전체 시스템의 작동을 이룬다. 이때 운영체제는 프로세스 스케줄링 알고리즘을 사용하여 여러 프로세스가 동시에 실행되도록 관리한다. 프로세스는 스택, 힙, 데이터 영역 등의 메모리 영역을 사용하며, 이러한 메모리 관리는 운영체제에서 관리한다. 프로세스는 서로 통신할 수 있다. 이를 IPC(Inter-Process Communication)라고 하며, 이를 통해 프로세스 간 데이터를 주고받거나, 상태를 공유할 수 있다. 이러한 IPC 메커니즘도 운영체제에서 제공된다.

[알고리즘풀이 with python] 백준 14501번 - 퇴사 [내부링크]

설명 퇴사일까지의 모든 기간에서 가장 많은 수익을 얻을 수 있는 상담들을 골라야한다. 입력으로는 상담 일정표의 일수 N과 각각의 상담 기간 t, 금액 p가 주어진다. 해당 문제를 DP(Dynamic Programming)로 풀이하기 위해서는 뒤에서부터 거꾸로 생각하는 것이 좋다. 우선 마지막 날부터 시작해서, 해당 날짜에 상담을 수행할 수 있는 경우와 수행할 수 없는 경우를 확인해가며 최대 수익을 저장하는 배열 dp를 채워나간다. 해당 날짜에 상담이 불가능한 경우, dp[i+1] 값을 그대로 가져온다. 해당 날짜에 상담이 가능한 경우, 두 값을 max를 사용하여 갱신한다. 코드는 다음과 같다. dp[i] = max(dp[i+1], p[i] + dp[i + t[i]]) 참고로 i는 날짜 변수다. ( 1일, 2일, 3일 ...) p[i] + dp[i + t[i]]라는 것은 i일에 상담한 경우 p[i]라는 보상을 받고 ( = p[i]) i + t[i]라는 것은 현재날짜 + 걸린시간이며,

[알고리즘풀이 with Python] 백준 11279번 - 최대힙 [내부링크]

설명 파이썬 heapq 모듈을 사용하여 최대힙을 구현하였다. heapq 모듈을 사용하면 우선순위 큐를 간편하게 구현할 수 있다. 우선 입력으로 받은 값들을 리스트 arr에 넣는다. 입력받은 값이 0인 경우에는 최대값을 출력해야 하므로, arr에서 최대값을 뽑아서 음수로 바꾼 후 출력한다. 이 때, arr가 비어있는 경우에는 0을 출력한다. 입력받은 값이 0이 아닌 경우에는 heapq.heappush() 함수를 사용하여 arr 리스트에 값 -val을 추가한다. 이 때, 우선순위 큐는 값이 작은 것이 우선순위가 높으므로, 값의 부호를 바꾸어 음수로 만들어서 넣어준다. 풀이 import sys import heapq input = sys.stdin.readline N = int(input()) arr = [] for i in range(N): val = int(input()) if val == 0: if arr: print(-heapq.heappop(arr)) else: print(0)

[python] input vs sys.stdin.readline [내부링크]

파이썬에서는 일반적으로 input 함수를 사용하여 입력을 받는다. 하지만, 이 함수는 입력 데이터가 많을 경우 시간이 오래 걸리는 단점이 있다. 그 이유는 입력받은 값의 자료형에 따라 처리 시간이 달라지기 때문이다. 예를 들어, 문자열을 입력받으면 처리 시간이 더 오래 걸리고, 숫자를 입력받으면 처리 시간이 덜 걸리게 된다. 이러한 문제를 해결하기 위해, sys.stdin.readline 함수를 사용하여 입력 속도를 높이는 방법이 있다. 이 함수를 사용하면 개행 문자('\n')까지 한 번에 읽어들이기 때문에 input 함수보다 빠른 속도로 입력을 받을 수 있다. 또한, sys.stdin.readline은 입력받은 값을 문자열(string) 형태로 반환하기 때문에, 자료형 변환이 필요할 수 있지만 처리 시간이 일정하게 유지된다. 이를 통해, 입력이 많은 경우에도 빠르게 처리할 수 있다. 하지만, 입력을 받은 후에는 strip() 함수를 사용하여 개행 문자를 제거해야 한다. 이는 입력받

[운영체제] Scheduling 종류 (+ MLQ와 MLFQ의 차이점) [내부링크]

운영 체제에서 스케줄링은 여러 개의 프로세스 중에서 어떤 프로세스를 다음에 실행할지를 결정하는 것이다. 스케줄링 알고리즘은 이러한 결정을 수행하는 방법을 정의한다. 이 알고리즘은 프로세스의 우선순위, 작업 크기, 실행 시간 등 다양한 요소를 고려하여 최적의 스케줄링 결정을 내린다. 스케줄링 알고리즘의 종류는 매우 다양하지만, 대표적인 것은 다음과 같다. FCFS(First-Come, First-Served) 스케줄링: 먼저 도착한 프로세스를 먼저 처리하는 방식입니다. 큐(Queue)를 이용하여 대기하는 프로세스를 관리한다. SJF(Shortest-Job-First) 스케줄링: 실행 시간이 가장 짧은 작업을 먼저 처리하는 방식이다. 예측 실행 시간을 이용하여 실행 시간을 예측하고, 이를 기반으로 스케줄링 결정을 내린다. Round Robin 스케줄링: 고정된 시간 할당량(time quantum)을 가지고 프로세스를 처리하는 방식이다. 시간 할당량이 지나면 프로세스는 큐의 뒤로 이동하고

[알고리즘풀이 with Python] 백준 2178번 - 미로탐색 [내부링크]

설명 BFS(너비 우선 탐색) 알고리즘을 사용하여 미로찾기 문제의 해답을 구한다. (0, 0)의 좌표에서 시작해서 (N-1, M-1)의 좌표까지 최소거리를 찾는 문제다. 먼저, 입력을 받는 부분에서 sys.stdin.readline을 사용하여 입력을 빠르게 받는다. 그리고, N개의 줄에 걸쳐서 M개씩의 숫자를 입력받아 2차원 리스트인 graph에 저장한다. 이때, strip 함수를 사용하여 개행 문자('\n')를 제거해준다. 다음으로, BFS 알고리즘을 구현한다. BFS 알고리즘은 큐(queue)를 사용하여 구현한다. 우선, bfs(0, 0)을 호출하여 시작점인 (0, 0) 좌표를 큐에 추가한다. 그리고, 큐가 빌 때까지 다음을 반복한다. 큐에서 좌표 (a, b)를 꺼낸다. 상하좌우로 인접한 좌표(nx, ny)를 계산한다. 만약 인접한 좌표 (nx, ny)가 미로의 범위를 벗어나지 않고, 해당 좌표의 값이 1인 경우에는 해당 좌표를 큐에 추가한다. 그리고, 해당 좌표 (nx, ny)

[Android] 기술 면접 질문 모음 #1 [내부링크]

Q1. 안드로이드에 대해 설명하시오. A1. 안드로이드는 오픈소스 기반의 리눅스(Linux) 운영체제로, 모바일 기기, 태블릿, TV 등에서 사용됩니다. Q2. 안드로이드의 네 가지 핵심 장점이 무엇인가요? A2. 오픈소스: 라이선스, 배포 및 개발 비용이 없다는 것을 의미합니다. 플랫폼 독립성: Windows, Mac, Linux 플랫폼을 지원합니다. 고도로 최적화된 가상 머신: 안드로이드는 모바일 기기에 맞게 고도로 최적화된 가상 머신인 DVM(Dalvik Virtual Machine)을 사용합니다. 다양한 하드웨어 지원: 안드로이드는 다양한 하드웨어 제조사들이 지원하는 다양한 디바이스를 지원합니다. Q3. 안드로이드(Android)에는 다양한 버전이 있습니다. 그렇다면 모든 디바이스에서 작동하는 앱을 만드는 방법은 무엇일까요? A3. 현재 활성화된 디바이스의 99%가 해당 앱을 실행할 수 있도록, 안드로이드 SDK의 최소 버전을 21과 같은 낮은 값으로 유지합니다. Q4. 다양

[Android, Kotlin] 액션바에 뒤로가기 버튼 활성화 [내부링크]

Activity.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityBinding.inflate(layoutInflater) // 해당 뷰와 데이터 연결할 binding 대입 setContentView(binding?.root) // ActionBar 설정 setSupportActionBar(binding?.toolbar) // 해당 뷰의 툴바 아이디 작성 // action bar 사용해서 디스플레이 활성화 if(supportActionBar != null){ supportActionBar?.setDisplayHomeAsUpEnabled(true) } binding?.toolbarExercise?.setNavigationOnClickListener { onBackPressed() // 뒤로가기 버튼 클릭 } ... } activity.xml

[컴퓨터 네트워크] 개요 [내부링크]

컴퓨터에서 다른 컴퓨터로 데이터를 전송 OSI 7 계층 (Transport, Network 계층 중요) TCP / IP 라우터를 이용한 네트워크 구축 무선 이동 통신 ..

[네트워크] OSI 7계층 - 응용계층 (Application layer) [내부링크]

통신 네트워크에서 호스트가 사용하는 공유 통신 프로토콜 및 인터페이스 방법에 특화된 추상계층 TCP/IP - 응용 계층은 통신을 표준화 - client - server 나 peer to peer 네트워킹 모델에서 데이터 교환 관리를 위해 전송 계층에 의존 Sub layer - OSI 모델은 두 종류의 응용 계층 서비스로 구성 1. CASE(Common application service element) 2. SASE(Specific application sevice element) - 응용 계층 프로토콜은 여러 application service element 기능을 사용하여 구현

[네트워크] OSI 7계층 - 전송계층 (Transport layer) [내부링크]

계층 구조의 네트워크 구성요소와 프로토콜 내에서 송신자와 수신자를 연결하는 통신 서비스를 제공 서비스 - Connection-oriented communication - Same order delivery - Reliability - Flow control - Congestion avoidance - Multiplexing 특징 - 호스트 컴퓨터의 응용 프로그램 프로세스에 데이터를 전달 - 시퀀스 넘버 기반의 오류 제어 방식을 사용 - 인터넷의 기반이 TCP/IP 참조 모델과 일반적인 네트워크 모델의 개방형 시스템 간 상호 접속 모두 포함 - end-to-end 간 신뢰성 있고 효율적인 데이터를 전송 프로토콜 - TCP (전송 제어 프로토콜) → Connection-oriented - UDP (사용자 데이터그램 프로토콜) → 보다 단순한 전송에 사용

[네트워크] OSI 7계층 - 네트워크 계층 (Network layer) [내부링크]

다른 장치 또는 네트워크 간에 연결을 허용하고 데이터 패킷을 전송 특징 - Routing : 네트워크 계층 프로토콜은 소스부터 목적지까지 적합한 경로를 결정 - Logical Addressing : 상호 네트워크 간 확실하게 각 장치를 식별하도록 adressing scheme을 정의한다. 발신자와 수신자의 IP 주소는 네트워크 계층에 의해 헤더에 배치된다. 이런 주소는 각 장치를 고유하고 보편적으로 구별해준다. - 네트워크 계층의 세그먼트 = 패킷 - 네트워크 계층은 라우터와 같은 네트워킹 장치에 의해 구현된다. 프로토콜 - IPV5, IPV6, ICMP, IPSEC, ARP, MPLS 출처 https://www.geeksforgeeks.org/layers-of-osi-model/ Layers of OSI Model - GeeksforGeeks A Computer Science portal for geeks. It contains well written, well thought

[네트워크] OSI 7계층 - 데이터 링크 계층 (Data Link layer) [내부링크]

장치 간 신호를 전달하는 물리 계층을 이용하여 네트워크 상의 주변 장치들 간 데이터를 전송 특징 - 두 개의 하위계층으로 나뉘어진다. 1. Logical Link Control (LLC) 2. Media Access Control (MAC) - 패킷이 네트워크에 도착하면 MAC 주소를 사용하여 호스트로 패킷을 전송하는 것이 DLL의 역할이다. - Framing : 송신자가 수신자에게 비트 집합을 전송하는 방법을 제공. 이는 프레임의 시작과 끝에 특별한 비트 패턴을 부여해서 수행 가능. - Physical addressing : 프레임 생성 후, 데이터 링크 계층은 각 프레임의 헤더에 발신자 및 수신자의 물리적 주소(MAC 주소)를 추가. - Error control : 데이터 링크 계층은 손상되거나 손실된 프레임을 감지하고 재전송하는 기술을 제공. - Flow control : 데이터 속도는 양쪽에서 일정해야 하며 그렇지 않으면 데이터가 손상될 수 있다. 그러므로 Flow cont

[네트워크] TCP/IP 모델 [내부링크]

컴퓨터를 인터넷에 연결하는 방법과 컴퓨터 간에 데이터를 전송하는 방법을 결정하는 것에 영향을 미친다. 특징 여러 컴퓨터 네트워크가 함께 연결된 경우 가상 네트워크를 만드는데 도움이 됨 유연한 TCP/IP 아키텍쳐 지원 TCP/IP 프로토콜 suite에서 네트워크는 소스 및 대상 시스템이 제대로 작동할 때까지 그대로 유지 TCP는 연결 지향 프로토콜 TCP는 안정성을 제공하고 순서를 벗어나 도착한 데이터가 다시 정렬되도록 함 TCP를 사용하면 flow control을 구현할 수 있으므로 발신자는 데이터로 수신자를 압도하지 않음 Layers Application Layer : 커뮤니케이션 파트너를 식별하고 자원 가용성을 결정하며, 커뮤니케이션 동기화에 도움을 준다. 사용자가 원격 호스트에 log on할 수 있도록 한다. 다양한 이메일 서비스를 제공한다. 다양한 개체 및 서비스의 global information에 대한 액세스 및 분산 데이터베이스 소스를 제공한다. Transport

[네트워크] OSI Model vs TCP/IP [내부링크]

출처 : wikipedia 차이점 OSI 모델은 7계층이고, TCP/IP는 4계층이다. OSI 헤더 사이즈는 5 bytes이고, TCP/IP는 20 bytes이다. OSI는 개방형 시스템 상호 연결을 하고, TCP/IP는 전송 제어 프로토콜을 나타낸다. OSI는 수직적 접근 방식을 따르는 반면, TCP/IP는 수평적 접근 방식을 따른다. OSI 모델에서 Transport Layer는 연결 지향적이다. 하지만 TCP/IP는 연결 지향적이고 비연결적이다. OSI 모델은 ISO(International Standard Organization)에서 개발하고 TCP 모델은 ARPANET(Advanced Research Project Agency Network)에서 개발한다. OSI 모델은 라우터, 스위치, motherboard 및 기타 하드웨어를 표준화하는 데 도움이 되는 반면 TCP/IP는 다른 유형의 컴퓨터 간에 연결을 설정하는 데 도움이 된다. 출처 https://www.guru99

[베이스볼맵 Application] 회고록 part 1-1 : 기술 구현 관련 (Naver geocode, Retrofit2, kakao 우편주소 서비스) [내부링크]

"베이스볼맵 - 야구 용병 찾기" 프로그래밍 언어 : kotlin 개발 환경 : Android Studio 개발 소요 기간 : 약 1달 반 part 1 : 기술 구현에 있어 노력한 점 1. Geocode 및 Retrofit2 2. Paging 3. Firebase를 통한 백엔드 구축 Geocode 및 Retrofit2 활용 먼저, 사용자가 게시글을 작성하기 위해 선택한 약속 장소를 지도에서 표시하는 로직 구조를 설계하였습니다. 이를 위해 네이버의 Geocode와 카카오의 우편주소 서비스 API를 활용하였습니다. 장소의 위도와 경도 값을 가져오는 과정은 다음과 같습니다: ① 웹뷰에서 카카오 우편주소 서비스를 적용한 HTML을 불러옵니다. 이는 네이티브 앱에서 해당 API를 사용하기 위해 HTML에 호스팅하는 방법을 사용합니다. ② 사용자가 검색 후 선택한 주소의 텍스트를 변수에 저장합니다. ③ 데이터베이스에서 해당 주소가 존재하는지 먼저 확인합니다. 이는 Geocode 호출을 최소화하

[베이스볼맵 Application] 회고록 part 1-2 : 기술 구현 관련 - Paging [내부링크]

part 1 : 기술 구현에 있어 노력한 점 1. Geocode 및 Retrofit2 2. Paging 3. Firebase를 통한 백엔드 구축 2. Paging paging 이란, datbase나 network에 있는 데이터를 불러올 때 데이터를 분리해서 가져오는 기법이다. 리소스 관리에 효율적이다. 앞의 설명에 덧붙이자면, 모든 데이터를 지정된 양만큼 나눠서 가져오는 것입니다. 데이터가 1천 개, 1만 개 등으로 커질 시 작업량이 많아질 수 있겠다는 생각을 했습니다. 또한 약속날짜가 지난 과거글까지 모두 불러올 필요는 없기 때문입니다. 그래서 장소 게시판, 내 글 게시판, 댓글 단 글 게시판에 적용해봐야겠다는 생각을 했습니다. <무한 스크롤> 무한 스크롤은 사용자가 페이지를 이동하거나 추가적인 클릭 없이 스크롤만으로 콘텐츠를 계속 탐색할 수 있게 해주는 기법입니다. 이는 특히 모바일 환경에서 유용하며, 사용자가 더 많은 콘텐츠를 탐색하도록 유도할 수 있습니다. 그러나 무한 스크롤

WAR(대체선수 대비 승리기여도) [내부링크]

대체 선수에 비해 얼마나 많은 승리에 기여했는가를 나타내는 수치 계산법 · 타자 WAR 타자의 공격 득점 + 주루 득점 + 수비 득점 + 포지션 조정 + 리그 조정 + 대체선수 대비 추가 득점을 해당 시즌의 승리당 득점값으로 나눔. · 투수 WAR 리그 FIP(수비무관 평균자책점), 투수 FIP, 승리당 투수별 득점값, 선발과 불펜간의 대체 수준, 리그보정 등이 필요. (다만, 불펜은 Levearage Multiplier for Relivers가 추가로 필요.) 참고자료 : FANGRAPHS https://library.fangraphs.com/misc/war/ What is WAR? Wins Above Replacement (WAR) is an attempt by the sabermetric baseball community to summarize a player’s total contributions to their team in one statistic. You should a

BABIP(Batting Average on Balls In Play) [내부링크]

바빕..? 인플레이 타구의 타율을 의미한다. 수비, 운, 타자의 실력이 중요 계산법 Detail - 땅볼 유형 투수의 BABIP은 상대적으로 낮다. - 후보선수에게 BABIP을 들이미는 것은 어불성설 (주전에 비해 적은 타석) 참고자료 : FANGRAPH https://library.fangraphs.com/offense/babip/ BABIP Batting Average on Balls In Play (BABIP) measures how often a ball in play goes for a hit. A ball is "in play" when the plate appearance ends in something other than a strikeout, walk, hit batter… library.fangraphs.com

[자료구조] 배열 vs 연결리스트 [내부링크]

개요 배열 : 원소들이 메모리에서 일정한 간격(a fixed distance)으로 나열되어 있음 연결 리스트 : 원소들이 메모리에서 임의의 위치(at arbitrary position)에 배치되어 있음 접근 방법 배열 : 인덱스 연결 리스트 : 포인터 접근 방식 배열 : Random access (원소의 위치와 접근 시간의 연관성이 없음) 연결 리스트 : Sequential access (접근 시간이 원소의 위치에 의해서 결정됨) 접근 경로 배열 : 첫 번째 원소의 주소 연결 리스트 : 첫 번째 원소의 주소 공간 할당 배열 : 정적 할당 및 동적 할당 연결 리스트 : 동적 할당

[자료구조] 이진탐색트리 [내부링크]

정의 1. 모든 노드는 서로 다른 하나의 값을 저장 2. 왼쪽 부분 트리의 모든 값들은 루트 노드의 값보다 더 작음 3. 오른쪽 부분 트리의 모든 값들은 루트 노드의 값보다 더 큼 4. 왼쪽 부분 트리와 오른쪽 부분 트리 모두 이진 탐색 트리 예시 루트 노드인 8을 기준 → 왼쪽은 비교적 작고, 오른쪽은 비교적 더 크다. 연산 - 생성 (초기화) - 검색 - 추가 - 제거 4개의 연산들의 시간 복잡도(n개의 노드)는 같은 결과를 가진다. Balanced → O(log n) Skewed(Non-Balanced) → O(n) 참고자료 K-mooc 자료구조 http://www.kmooc.kr/courses/course-v1:SMUk+SMU2018_01+2021_1_T1/about Binary search tree https://en.wikipedia.org/wiki/Binary_search_tree Balanced vs Non-Balanced https://appliedgo.net/bal

[Android] 에러 Execution failed for task ':app:processDebugAndroidTestManifest' [내부링크]

경로 Gradle Scripts → build.gradle (Module: 파일명) 변경 사항 compileSdk 그리고 defaultConfig 안의 targetSdk를 변경해주면 된다. 예시) 32 → 30

[Androidstudio] Image view크기에 맞게 사이즈 조절 [내부링크]

<ImageView android:id="@+id/iv_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:adjustViewBounds="true" // 이 부분 추가!! tools:src="@drawable/image" />

[Androidstudio] button의 background 색깔 변경 [내부링크]

<Button android:id="@+id/btn_finish" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="25dp" android:backgroundTint="@color/white" // backgroundTint를 활용해준다. android:textColor="@color/design_default_color_primary" android:text="종료" android:textSize="18sp" android:textStyle="bold" />

[Android] build.gradle에서 buildFeatures 생성 안되는 상황 해결법 [내부링크]

문제) bulid.gradle에서 buildFeatures 생성이 안됨 android{ ... buildFeatures{ viewBinding true } } 해결법 1. 위에 코드와 같이 우선 작성 2. 상단 메뉴 중 'build' -> 'Rebuild Project' 클릭

[Android Studio] 타이틀 바 제거 [내부링크]

경로 res 폴더→ values 폴더 → themes 폴더 → themes.xml <resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.BaseballMaps" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- 타이틀 바 없애기 --> <item name="windowNoTitle">true</item> ... ...

[Android studio] 상태 바 제거 [내부링크]

경로 res 폴더 -> values 폴더 -> themes 폴더 -> themes.xml <resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.BaseballMaps" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- 타이틀 바 없애기 --> <item name="android:windowFullscreen">true</item>

'베이스볼맵' 안드로이드 애플리케이션 기술 정리 [내부링크]

개요 지도를 활용한 야구용병 구인 커뮤니케이션 서비스 주요기능 회원가입 사용자는 회원가입을 통해 서비스를 이용할 수 있습니다. 회원 가입 후 사용자는 게시글을 등록할 수 있습니다. 게시판 및 지도표시 게시글 등록 시 해당 게시글의 위치 정보를 제공하기 위해 네이버 지도에 마커로 표시됩니다. 위치 정보를 얻기 위해 웹뷰(카카오 우편주소 서비스)를 통해 검색한 장소의 위도와 경도를 네이버 geocode를 활용해 획득합니다. 사용자는 게시글에 댓글을 작성할 수 있으며, 댓글 작성 시 다른 사용자들과 대화를 나눌 수 있습니다. 신고 기능 사용자는 다른 사용자들을 신고하거나 차단할 수 있습니다. 이를 통해 사용자들은 불쾌한 상황을 방지하고 안전한 환경에서 서비스를 이용할 수 있습니다. 주요 기술 기술 설명 개발툴 Kotlin 개발 언어 Android 안드로이드 버전 9 이상 Android Studio 3.1 Firebase Authentication 사용자 관리 Firestore 게시글, 댓

[Java]야구선수 타율 계산하기 [내부링크]

class PlayerInfo{ int ab; int h; PlayerInfo(int ab, int h){ this.ab = ab; this.h = h; } } class Average extends PlayerInfo{ // class Average는 PlayerInfo를 상속받는다. // contributors Average(int ab, int h){ super(ab, h); } double avg = (double)h/ab; // method void avgCalculate(){ System.out.printf("His 2021 batting average is %.3f", avg); } } public class Baseball_Hitter{ public static void main(String[] args){ Average p1 = new Average(387, 107); // 2021 채은성 타수 및 안타 입력 p1.avgCalculate(); } } //결과 His