분류 전체보기 233

BOJ 1436 - 영화감독 숌

문제https://www.acmicpc.net/problem/1436  풀이완전탐색을 이용해 문제를 해결한다 규칙을 파악하면 다음과 같다666, 1666, 2666, 3666, 4666, 5666, 6660, 6661, 6662, 6663, 6664규칙을 수학적인 규칙으로 접근하려면 오래걸린다따라서 1부터 숫자를 증가시켜서 666이 포함됐는지 확인한다 N의 최대값이 10,000이고, 이때 666 숫자는 266799이다 1 ~ 2666799까지 탐색과 666찾기가 최대 O(n^2) 시간 복잡도로 해결이 가능하다  코드python12345678910111213141516current = 0answer = 1 n = int(input()) while True:    if "666" in str(answer)..

BOJ/미해결 2024.08.23

예외 처리

프로그램 오류컴파일 오류: 프로그램 코드 작성 중 발생하는 문법적 오류다런타임 오류: 실행 중인 프로그램이 의도하지 않은 동작을 하거나 프로그램이 중지 되는 오류다. 시스템의 심각한 장애를 발생할 수 있다예외 처리의 중요성프로그램의 비정상 종료를 피해 시스템이 원할하게 실행되게 한다런타임 오류가 발생한 경우 오류의 과정을 재현하는 것은 힘들다오류가 발생한 경우 로그를 남겨서 추후 로그 분석을 통해 원인을 파악해 버그를 수정하는 것이 중요하다예외 클래스시스템 오류(error): 가상 머신에서 발생한다. 프로그래머가 처리할 수 없는 오류다. 동적 메모리가 없는 경우, 스택 메모리 오버플로우등이 있다예외(Exception): 프로그램에서 제어할 수 있는 오류다. 읽어야할 파일이 없거나 네트워크, DB 연결이 ..

Java 2024.08.23

직렬화

Serialization인스턴스의 상태를 그대로 파일로 저장하거나 네트워크로 전송(serialization)하고 이를 다시 복원(deserialization)하는 방식자바에서는 보조 스트림을 활용해 직렬화를 제공한다생성자설명ObjectInputStream(InputStream in)InputStream을 생성자의 매개변수로 받아 ObjectInputStream을 생성합니다.ObjectOutputStream(OutputStream out)OutputStream을 생성자의 매개변수로 받아 ObjectOutputStream을 생성합니다.Serializable 인터페이스구현 코드가 없는 marker interface다transient 키워드를 통해 직렬화 하지 않는 멤버 변수를 지정한다(Socket 등 직렬화 ..

Java 2024.08.23

멀티 Thread 동기화

critical section과 semaphorecritical section은 두 개 이상의 스레드가 동시에 접근하는 경우 문제가 생길 수 있기 때문에 동시에 접근할 수 없는 영역이다semaphore는 특별한 형태의 시스템 객체이며 get, release 두 개 기능이 있다한 순간에 하나의 스레드만 semaphore를 얻을 수 있고, 나머지 스레드들은 대기 상태가 된다semaphore를 얻은 스레드는 critical section에 접근할 수 있다동기화두 개의 스레드가 같은 객체에 접근할 경우, 동시에 접근해서 오류가 발생한다동기화는 임계영역에 접근한 경우 공유 자원을 lock 하여 다른 스레드의 접근을 제어한다동기화를 잘못 구현하면 데드락에 빠질 수 있다synchronized자바에서는 임계영역에 동시..

Java 2024.08.22

BOJ 2630 - 색종이 만들기

문제https://www.acmicpc.net/problem/2630  풀이분할 정복으로 문제를 해결한다 (0~n, 0~n) 구역이 모두 같은 색이면 해당 색깔의 종이 수를 1 더하고 함수를 종료한다모두 같은 색이 아니라면 다음 4구역으로 나눈 후 각 구역에서 모두 같은 색인지 확인한다(0~n/2, 0~n/2)(n/2~n, 0~n/2)(0~n/2, 0/2~n)(n/2~n, n/2~n)  코드python1234567891011121314151617181920212223242526272829def solve(y, x, n):    global white, blue    reference_color = color_paper[y][x]     for i in range(y, y + n):        for j..

BOJ/미해결 2024.08.20

Recursion 응용 2 - 블롭 카운팅

해당 게시물은 인프런 - "영리한 프로그래밍을 위한 알고리즘 강좌" 강의를 참고하여 작성한 글 입니다강의 링크문제그림에서 특정 좌표의 blob의 크기를 구하는 문제다Binary 이미지다각 픽셀은 image pixel 또는 background pixel이다서로 연결된 image pixel들을 blob이라고 부른다상하좌우 및 대각 방향으로도 연결된 것으로 간주한다위 그림에서는 총 4개의 blob이 있다문제를 정의하면 다음과 같다입력:N x N 크기의 2차원 그리드하나의 좌표 (x, y)출력:픽셀 (x, y)가 포함된 blob의 크기(x, y)가 어떤 blob에도 속하지 않는 경우에는 0Recursive Thinking이 문제를 Recursion을 이용해 해결해 본다수도 코드는 다음과 같다현재 픽셀이 imag..

알고리즘 2024.08.19

BOJ 2477 - 참외밭

문제https://www.acmicpc.net/problem/2477  풀이육각형의 빈 공간을 채워서 큰 직사각형의 넓이를 구한 후, 빈 공간의 직사각형의 넓이를 구해서 빼준다 입력에서 방향이 1번만 나오는 가로와 세로 길이가 가장 긴 길이다이를 이용해서 빈 공간을 채웠을 때 가장 큰 직사각형의 넓이를 구한다 빈 공간의 직사각형 넓이는 다음을 이용해 구한다가장 긴 가로 길이 인덱스에서 +3을 하면 빈 공간의 세로 길이 인덱스가 나온다가장 긴 세로 길이 인덱스에서 +3을 하면 빈 공간의 가로 길이가 나온다이를 이용해서 빈 공간에 직사각형의 넓이를 구할 수 있다  코드python12345678910111213141516171819202122232425directions = []lengths = []max_a..

BOJ/미해결 2024.08.19

BOJ 1489 - 대결

문제https://www.acmicpc.net/problem/1489  풀이그리디 문제다 a[i]의 값보다 작은 수가 b에 존재한다면, 그 중에서 가장 큰 값을 이겨야 한다그래야 무승부를 최대한 적게 가져가면서 승리를 최대한 많이 가져가고, 점수를 최대한 많이 가져갈 수 있다 구현은 먼저 승리하는 경우의 점수를 더하고, 마지막에 무승부하는 경우에 점수를 더한다  코드python123456789101112131415161718192021222324252627282930313233343536result = 0csort_a = [0] * 1002csort_b = [0] * 1002 n = int(input())a = [int(x) for x in input().split()]b = [int(x) for x i..

BOJ/미해결 2024.08.17

BOJ 1071 - 소트

문제https://www.acmicpc.net/problem/1071  풀이그리디 문제다사전 순으로 가장 앞선 것을 출력하기 위해 배열이 오름차순으로 정렬되어야 한다이를 위해 계수정렬을 통해 배열을 정렬한다 다음 규칙을 적용한다a[i] 값에 대하여1. a[i] + 1 값이 배열에 존재하면1-1. a[i] + 2 이상의 값 k가 배열 안에 존재하면, a[i] 값을 전부 출력하고 k를 출력한다1-2. a[i] + 2 이상의 값이 배열 안에 존재하지 않으면, a[i] + 1 값을 한번 출력한다 2. a[i] + 1 값의 배열에 존재하지 않는다면 a[i] 값을 전부 출력한다  코드python12345678910111213141516171819202122232425262728293031323334353637383..

BOJ/미해결 2024.08.16

BOJ 11729 - 하노이 탑 이동 순서

문제https://www.acmicpc.net/problem/11729  풀이재귀를 이용해 문제를 해결한다1. 가장 큰 원판 n은 맨 밑에 있어야 하므로 n-1개를 첫 번째 장대에서 두 번째 장대로 옮긴다2. 원판 n을 첫 번째 장대에서 세 번째 장대로 옮긴다3. 원판 n-1개를 두 번째 장대에서 세 번째 장대로 옮긴다 원판을 옮겨야 하는 총 횟수는  2ⁿ-1 이다 재귀함수에서 2ⁿ으로 자기 자신을 호출하고 n == 1일 때 한 번만 호출하므로 -1을 해준다  코드python12345678910111213def hanoi(n, src, aux, dest):    if n == 1:        print(src, dest)    else:        hanoi(n - 1, src, dest, aux)..

BOJ/미해결 2024.08.15