알고리즘 42

Spring(스프링) 비밀번호 암호화 (SHA-256 알고리즘)

스프링 프로젝트에서 데이터베이스에 저장되어 있는 비밀번호는 사용자의 개인정보이기 때문에 암호화하는 것이 바람직하다. 그러므로, 스프링 프로젝트에서 비밀번호를 암호화하는 방법은 아래와 같다. 1. 프로젝트 - util 디렉토리 생성 - SHA_256.java 파일 생성 package projectname.common.util; import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.security.MessageDigest; @Component("SHA_256") public class SHA_256 { public String encrypt(String planText) { try { Messa..

Spring 2021.10.17

[파이썬] 투 포인터(Two Pointers)

[투 포인터란 ?] 투 포인터 알고리즘은 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘이다. 리스트에 담긴 데이터에 순차적으로 접근해야 할 때는 시작점과 끝점 즉, 2개의 점으로 접근할 데이터의 범위를 표현할 수 있다. 투 포인터 알고리즘의 동작 과정은 다음과 같다. 1. 시작점(start)과 끝점(end)이 첫 번재 원소의 인덱스(0)를 가리키도록 한다. 2. 현재 부분 합이 M과 같다면 카운트한다. 3. 현재 부분 합이 M보다 작다면 end를 1 증가시킨다. 4. 현재 부분 합이 M보다 크거나 같다면 start를 1 증가시킨다. 5. 모든 경우를 확인할 때까지 2번부터 4번까지의 과정을 반복한다. [투 포인터 알고리즘 예제] # 데이터의 개수 N n = 5 # ..

[파이썬] 에라토스테네스의 체 알고리즘

[에라토스테네스의 체란 ?] 에라토스테네스의 체는 다수의 자연수에 대하여 소수 여부를 판별할 때 사용하는 대표적인 알고리즘이다. 에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾을 때 사용할 수 있다. 에라토스테네스의 체 알고리즘의 동작 과정은 다음과 같다. 1. 2부터 N까지의 모든 자연수를 나열한다. 2. 남은 수 중에서 아직 처리하지 않은 가장 작은 수 i를 찾는다. 3. 남은 수 중에서 i의 배수를 모두 제거한다. (단, i는 제거하지 않는다.) 4. 더 이상 반복할 수 없을 때까지 2번과 3번의 과정을 반복한다. 이러한 에라토스테네스의 체를 이용해서 소수판별 프로그램을 C언어로 구현한 코드는 아래의 게시물에서 확인할 수 있다. https://unie2.tistory.com/42?categ..

재귀 함수 (Recursive Function)

[재귀 함수란?] 자기 자신을 다시 호출하는 함수이다. [단순한 형태의 재귀 함수 예제] def recursive_function() : print('재귀 함수 호출') recursive_function() recursive_function() [재귀 함수의 종료 조건] 재귀 함수를 문제 풀이에서 사용할 때에는 재귀 함수의 종료 조건을 반드시 명시해야 한다. 종료 조건을 제대로 명시하지 않으면 함수가 무한히 호출될 수 있다. [종료 조건을 포함한 재귀 함수 예제] def recursive_function(i) : # 100번째 호출 했을 때 종료 if i == 100 : return print(i, '번째 재귀함수에서', i + 1, '번째 재귀함수를 호출') recursive_function(i + 1..

[구현] 이코테 (파이썬) 문자열 재정렬 풀이

[문제] 알파벳 대문자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다. 예를 들어 K1KA5CB7 이라는 값이 들어오면 ABCKK13을 출력합니다. [입력 조건] 1. 첫째 줄에 하나의 문자열 S가 주어집니다. (1

[구현] 이코테 (파이썬) 왕실의 나이트 풀이

[문제] 행복 왕국의 왕실 정원은 체스판과 같은 8 x 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서 있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다. 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다. 나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다. 1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기 2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 이처럼 8 x 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오. 이때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h..

[구현] 이코테 (파이썬) 시각 풀이

[문제] 정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오. 예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각이다. - 00시 00분 03초 - 00시 13분 30초 반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안되는 시각이다. - 00시 02분 55초 - 01시 27분 45초 [입력 조건] 1. 첫째 줄에 정수 N이 입력된다. (1

[구현] 이코테 (파이썬) 상하좌우 풀이

[문제] 여행가 A는 N x N 크기의 정사각형 공간 위에 서 있다. 이 공간은 1 x 1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1, 1) 이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당한다. 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)이다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있다. 계획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L, R, U, D 중 하나의 문자가 반복적으로 적혀 있다. 각 문자의 의미는 다음과 같다. (1) L : 왼쪽으로 한 칸 이동 (2) R : 오른쪽으로 한 칸 이동 (3) U : 위로 한 칸 이동 (4) D : 아래로 한 칸 이동 이때 여행가 A가 N x N 크기의 정사각형 공간을..

[그리디] 이코테 (파이썬) 모험가 길드 풀이

[문제] 한 마을에 모험가가 N명 있습니다. 모험가 길드에서는 N명의 모험가를 대상으로 '공포도'를 측정했는데, '공포도'가 높은 모험가는 쉽게 공포를 느껴 위험 상황에서 제대로 대처할 능력이 떨어집니다. 모험가 길드장인 동빈이는 모험가 그룹을 안전하게 구성하고자 공포도가 X인 모험가는 반드시 X명 이상으로 구성한 모험가 그룹에 참여해야 여행을 떠날 수 있도록 규정했습니다. 동빈이는 최대 몇 개의 모험가 그룹을 만들 수 있는지 궁금합니다. N명의 모험가에 대한 정보가 주어졌을 때, 여행을 떠날 수 있는 그룹 수의 최댓값을 구하는 프로그램을 작성하세요. ... ... 생략 ... 또한, 몇 명의 모험가는 마을에 그대로 남아 있어도 되기 때문에, 모든 모험가를 특정한 그룹에 넣을 필요는 없습니다. [입력 조..

[그리디] 이코테 (파이썬) 숫자 카드 게임

[문제] 숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 같다. 1. 숫자가 쓰인 카드들이 N x M 형태로 놓여 있다. 이때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다. 2. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다. 3. 그 다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다. 4. 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다. [입력 조건] 1. 첫째 줄에 숫자 카드들이 높인 행의 개수 N과 열의 개수 M이 공..