반응형

전체 글 232

11726.2xn타일링

문제 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. ## 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) ## 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 풀이 알고리즘 흐름 문제의 경우의 수를 그려보자. n=4 까지 확인해보면 일정한 패턴이 반복된다. 위의 그림처럼 노란블럭은 n-1 의 타일에 세로 타일이 1개 추가되고, 빨간블럭은 n-2의 타일에 가로타일이 2개씩 추가된다. 이를 dp로 나타내면, dp[n] = dp[n-1] + dp[n-2] 의 점화식을 가지게 된다. 코드 import java.io.Buffered..

Algorithm🥇 2023.11.01

1463.1로만들기

문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. ## 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. ## 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 풀이 알고리즘 흐름 이 문제는 재귀를 통해 문제를 풀이해야한다. 문제를 풀기위해 3가지 경우를 볼수있다. 3으로 나누는 경우 2로 나누는 경우 1을 빼는 경우 6으로 나눠지는 경우 즉, 6으로 나눠지는 경우는 3으로 나누는 경우와 2로 나누는 경우, 1을 빼는 ..

Algorithm🥇 2023.11.01

자바에서 숫자에 언더바 표시

자바에서 숫자에 언더바 표시 자바7 이후 버전부터 _가 숫자 리터럴의 어디에도 등장할 수 있다. 그 덕분이 숫자를 끊어 보이게 만들어 가독성을 높일 수 있다. 예를 들어 한국형 표시로 100만원을 int money = 1_000_000; 처럼 선언 할 수 있다. 하지만 어디에든 사용할수 있는것은 아니고 4가지 경우에는 _ 를 넣을 수 없다. 숫자의 처음이나 끝 소수점 앞,뒤 F나 L의 앞 숫자 문자열이 예상되는 위치 float f1 = 1_.23456F; // X; .의 앞에 위치(숫자와 숫자사이_ X) float f2 = 1._23456F; // X; .의 뒤에 위치(숫자와 숫자사이_ X) long longNum = 999_99_9999_L; // O; L의 앞에 위치 int ex1 = _26; // ..

Java🔥 2023.11.01

웹소켓 이란?

이번에 진행하는 2가지 프로젝트에서 웹소켓을 이용해서 채팅기능을 구현해야한다. 그전에 웹소켓이 뭔지 알아보도록 하자! 웹소켓(Web Socket)? 웹소켓 프로토콜은 클라이언트와 서버를 연결하고, 실시간으로 통신이 가능하도록 하는 프로토콜이다. 여기서 주목해야할점은 실시간이라는 점이다. HTTP 통신의 경우 클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신이지만, 웹소켓은 양방향, 실시간 통신을 한다. 또한 웹소켓은 애플리케이션 계층에서 동작하며 HTTP와 다르게 상태(Stateful) 프로토콜이다. 연결을 맺기위해 한번의 핸드셰이크를 주고받고, 이후에 지속적으로 연결을 보장한다. 이는 매번 매세지 전송에 새로운 연결을 맺을 필요가 없어 효율적이다. 즉, 클라이언트와 서버가 한번에 연결을 ..

BackEnd🧵 2023.10.28

알고리즘 개념 - 동적 계획법(DP)

DP Algorithm "동적계획법(Dynamic Programming)이란 큰 문제를 작은 문제로 나누어 푸는 알고리즘이다." 하나의 문제를 여러개의 작은 문제로 나누어 그결과를 저장(메모이제이션)하여 다시 큰문제를 해결할때 사용하는 것이다. Dynamic Programming 이라는이름이 뭔가 동적으로 프로그래밍을 해야하나? 생각할수있는데 전혀아니다. 그냥 큰문제를 작은문제로 쪼개서 그답을 저장해두고 활용한다는것에 집중하면될것이다. (기억하며풀기 알고리즘) 이러한 DP는 분할정복 알고리즘과도 닮은 부분이 있다. 하지만 분할정복에서는 부분문제의 계산결과를 저장하는 메모이제이션을 활용하지 않는다. 이것이 DP와 분할정복의 차이이고, 계산결과를 저장해두고 활용하기 때문에 시간복잡도 면에서 DP가 유리하다...

Algorithm🥇 2023.10.24

11653.소인수분해

문제 정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오. ## 입력 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. ## 출력 N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다. 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 99599 54229 42046 53.083% https://www.acmicpc.net/problem/11653 풀이 로직을 보면 아래와 같이 풀이될수있다. 72 / 2 = 36; 36 / 2 = 18; 18 / 2 = 9; 9 / 3 = 3; 3 / 3= 1; 1 < 2; (break); 72를 나눈다고 했을때 나눠지는 값으로 계속해서 나눈다. 코드 import ja..

Algorithm🥇 2023.10.23

11576.Base Conversion

문제 타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의 세계에서도 프로그래밍을 하고 싶었던 정이는 백준 사이트에 접속하여 문제를 풀기로 하였다. 그러나 미래세계는 A진법을 사용하고 있었고, B진법을 사용하던 정이는 문제를 풀 수가 없었다. 뛰어난 프로그래머였던 정이는 A진법으로 나타낸 숫자를 B진법으로 변환시켜주는 프로그램을 작성하기로 하였다. N진법이란, 한 자리에서 숫자를 표현할 때 쓸 수 있는 숫자의 가짓수가 N이라는 뜻이다. 예를 들어 N이 17일 때 한 자릿수에서 사용할 수 있는 수는 0, 1, 2, ... , 16으로 총 17가지가 된다. ## 입력 입력..

Algorithm🥇 2023.10.23

11005.진법변환2

문제 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다. A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35 ## 입력 첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다. ## 출력 첫째 줄에 10진법 수 N을 B진법으로 출력한다. 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.5 초 (추가 시간 없음) 256 MB 34254 16465 14175 48.195% https://www.acmicpc.net/problem/11005 풀이 여기서 확인해야 할것은 2가지이다. b..

Algorithm🥇 2023.10.23

2745.진법변환

문제 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다. A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35 ## 입력 첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다. ## 출력 첫째 줄에 B진법 수 N을 10진법으로 출력한다. 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 36718 18730 16000 50.834% https://www.acmicpc.net/problem/2745 풀이 코드 import java.io.Bu..

Algorithm🥇 2023.10.23

17103.골드바흐파티션

문제 골드바흐의 추측: 2보다 큰 짝수는 두 소수의 합으로 나타낼 수 있다. 짝수 N을 두 소수의 합으로 나타내는 표현을 골드바흐 파티션이라고 한다. 짝수 N이 주어졌을 때, 골드바흐 파티션의 개수를 구해보자. 두 소수의 순서만 다른 것은 같은 파티션이다. ## 입력 첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다. ## 출력 각각의 테스트 케이스마다 골드바흐 파티션의 수를 출력한다. 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.5 초 512 MB 20084 7692 5885 36.537% https://www.acmicpc.net/problem/17103 ..

Algorithm🥇 2023.10.20
반응형