전체 글

개발자를 꿈꾸는 비전공자 낙타 github https://github.com/jun9898
·코딩딩/BOJ
import sysfrom collections import dequeinput = sys.stdin.readlinedy = [-1, 1, 0, 0]dx = [0, 0, -1, 1]# 여기서 병합 가능한 국경을 추려서 그 좌표를 담은 2차원 list를 반환한다.def check(y, x, visited): # 단순 bfs로 인접한 국경중 병합이 가능한 국경을 추린다 check_list = [] queue = deque([(y, x)]) visited.add((y, x)) while queue: cur_y, cur_x = queue.popleft() for i in range(4): new_y, new_x = cur_y + dy[i],..
·코딩딩/Java
1. 학습 목표synchronized, reentrantlock 개념 숙지동시성 문제를 해결하기 위한 예시코드 작성2. 학습 내용synchronized멀티 스레드의 큰 장점으로는 자원의 공유가 있다. 하지만 해당 자원을 여러게의 쓰레드에서 접근하게 되면 반드시 안정성과 신뢰성에 문제가 발생할것.안좋은 예시 코드는 다음과 같다. private int counter = 0; // 공유자원 @Test public void testThreadSafety() throws InterruptedException { int numberOfThreads = 100; CountDownLatch countDownLatch = new CountDownLatch(numberOfThreads); // Thread 선언 In..
·코딩딩/Java
람다표현식 이란 동작파라미터화와 세트로 코드를 보다 간결하고 보기 좋게 만들어준다.표현식은 익명 클래스와 유사하지만 훨씬 깔끔함3.1 람다란 무엇인가?람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것.람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환형식, 발생할 수 있는 예외 리스트를 가질 수 있다.익명보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 구현해야 할 코드에 대한 걱정거리가 줄어든다.함수람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다.전달람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다.간결성익명 클래스처럼 많은 자질구레한 코드를 구현할 필요..
·코딩딩/BOJ
import sysfrom collections import dequeinput = sys.stdin.readlineINF = float('-inf')'''결국 bfs + 비트마스킹을 응용하면 되는 문제였음문제를 이해하기까진 어려웠지만 이해 후엔 그냥 무지성 bf랑 똑같았음'''def bfs(N, initialPositions): distance = [INF] * (N + 1) # BFS 큐 초기화 queue = deque() # 초기 위치 설정 for position in initialPositions: distance[position] = 0 queue.append(position) maxDistance = 0 while queue: ..
·코딩딩/BOJ
처음 접근은 무지성 BFS 두번 돌리는걸로 시도했다.당연히 플레 문제답게 결과는 시간초과... import sysfrom collections import dequeinput = sys.stdin.readlinedy = [-1, 1, 0, 0]dx = [0, 0, -1, 1]'''빙산 + bfs로 생각하면 될듯 함모든 빙산의 위치 좌표를 set 자료형에 저장백조 한마리의 위치정보 담기day = 0while True: tmpIce = [] set 자료형을 순회하며 물과 접촉하는 빙산을 탐색 만약 접촉한다면 set에서 제외하고 tmpIce에 append tmpIce에 저장되어있는 ice를 모두 녹임 백조 bfs 순회 시작 day += 1 시간초과!!내 생각엔 지금..
·코딩딩/Java
동작 파라미터화를 이용하면 자주 바뀌는 요구사항에 효과적으로 대응 가능동작 파라미터화란 하직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미 (filter 개념으로 이해하면 될듯)예를 들어 컬렉션을 처리할 때 다음과 같은 메서드를 구현한다고 가정하자리스트의 모든 요소에 대해서 ‘어떤 동작’을 수행할 수 있음 리스트 관련 작업을 끝낸 다음에 ‘어떤 다른 동작’을 수행할 수 있음 에러가 발생하면 ‘정해진 어떤 다른 동작’을 수행할 수 있음동적 파라미터화는 ‘특정 상황’에 ‘특정 행동’이 필요한 경우내부 객체로를 처리 불가능 한 경우 (해당 동작 책임을 가진 객체가 없는 경우)‘특정 상황’이 존재하지 않는다면 파라미터화 하지 않고 처리하는 것이 좋아보임내가 이해하기로는 약간 레고를 쌓는것처럼 동작 하나..
·코딩딩/Error
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' annotationProcessor 'org.projectlombok:lom..
·코딩딩/BOJ
import sysfrom collections import dequeinput = sys.stdin.readline'''지금 로직은 한눈에 봐도 문제가 많아보임visited 처리를 어떻게 해야할지가 관건내 가설만약 동생이 도착한곳에 이미 visited 처리가 되어있다면수빈이는 왓다리 갔다리 움직이며 해당 장소에 머물 수 있음여기서 또 문제 발생홀수와 짝수 레벨에 따라 엇갈리는 상황 발생!이를 해결하기 위해 visited를 홀, 짝으로 나눠주는게 필요할듯'''def bfs(n, k): visited = [[False] * 500001 for _ in range(2)] queue = [n] curTime = 1 k += curTime visited[0][n] = True w..
·코딩딩/Java
1.1 역사의 흐름은 무엇인가?자바 1.0에서는 스레드와 락, 심지어 메모리 모델까지 지원했다.아마 단일 코어 환경에서 최선의 퍼포먼스를 뽑아내기 위한 선택이였던 것으로 추측하지만 상당히 저수준의 기능을 온전히 활용하기는 어려웠다.자바 5에서는 스레드풀, 병렬 실행 컬렉션 등 아주 강력한 도구를 도입했다.자바 7에서는 병렬 실행에 도움을 줄 수 있는 포크/조인 프레임워크를 제공했지만 여전히 어려움스레드풀자바의 스레드풀(Thread Pool)은 작업을 처리하기 위해 미리 생성된 스레드들의 집합입니다. 이를 통해 새로운 스레드를 생성하는 오버헤드를 줄이고, 리소스를 효율적으로 관리하며, 애플리케이션의 성능을 향상시킬 수 있습니다. 스레드풀을 사용하면 일정 수의 스레드가 재사용되며, 작업 큐에 있는 작업을 순..
·코딩딩/BOJ
import sysfrom collections import dequefrom collections import defaultdictdy = [-1, 1, 0, 0]dx = [0, 0, -1, 1]input = sys.stdin.readline'''약간 불켜기와 비슷한 문제인것같은가장자리의 모든 좌표를 queue에 집어넣어두고 시작소유하고 있는 key를 set 자료형에 집어넣기door는 key : (좌표), (좌표) 이런식으로 저장될것평상시처럼 탐색. 만약 문을 찾으면 가지고 있는 key가 해당 문을 열 수 있는지 확인 없으면 door에 좌표와 필요한 key를 저장 만약 key를 찾으면 key를 set 자료형에 집어넣기 소유중인 door중에 문..
전낙타
낙타의 코딩일기