[알고리즘] 9

[JAVA] 문자열 압축, StringBuilder

오늘의 학습 키워드문자열 처리압축을 통한 변환Java의 문자열 메서드 사용오늘은 문자열을 특정 단위로 잘라서 반복되는 문자열을 압축하는 문제를 해결했습니다. 이를 위해 문자열을 다양한 단위로 잘라보고, 반복되는 문자열을 카운트하여 압축된 문자열의 길이를 구하는 방법을 배웠습니다. Java의 substring 메서드와 StringBuilder를 활용해 문자열을 처리했습니다.오늘의 회고어떤 문제가 있었고, 나는 어떤 시도를 했는지문자열을 특정 단위로 잘라서 반복되는 부분을 압축하여 가장 짧은 문자열을 찾는 문제였습니다. 처음에는 문자열을 단위로 자르는 방법과 반복되는 부분을 효율적으로 찾아내는 로직을 구현하는 데 어려움을 겪었습니다. class Solution { public int solution(S..

[알고리즘] 2024.07.25

[JAVA] 문자열 처리, HashMap

오늘의 학습 키워드문자열 처리맵핑을 통한 변환Java의 문자열 메서드 사용공부한 내용 본인의 언어로 정리하기오늘은 문자열 내에 일부 숫자를 영단어로 바꾼 문자열을 원래 숫자로 되돌리는 문제를 해결했습니다. 이를 위해 영단어와 숫자의 맵을 만들어서 문자열 내의 영단어를 대응하는 숫자로 치환하는 방법을 배웠습니다. Java의 HashMap을 활용해 영단어와 숫자를 매핑하고, replace 메서드를 이용해 문자열을 변환했습니다.오늘의 회고어떤 문제가 있었고, 나는 어떤 시도를 했는지 문자열 내에 숫자와 영단어가 혼합되어 있는 경우 이를 정확히 숫자로 변환하는 문제였습니다. 처음에는 숫자가 아닌 문자를 숫자로 변환하기 위해 반복문과 조건문을 사용하려 했습니다. 숫자가 아닌 문자를 만나면 이를 변환해 숫자로 바꾸..

[알고리즘] 2024.07.25

[JAVA] 배열의 최대공약수 계산

오늘의 학습 키워드최대공약수 (GCD) 계산배열의 최대공약수조건을 만족하는 가장 큰 양의 정수 찾기유클리드 알고리즘공부한 내용 본인의 언어로 정리하기오늘의 문제 : 숫자 카드 나누기 https://school.programmers.co.kr/learn/courses/30/lessons/135807class Solution { public int solution(int[] arrayA, int[] arrayB) { // 1번 조건 - 배열의 최대 공약수 int gcdA = gcdOfArray(arrayA); int gcdB = gcdOfArray(arrayB); // 2번 조건 - 다른 배열을 하나도 나눌 수 없는지 확인 i..

[알고리즘] 2024.07.23

C++ 백준 22351번: 수학은 체육과목 입니다 3

UCPC 2021 예선 문제 A 문제 [BOJ][C++] 백준 22351번: 수학은 체육과목 입니다 3 문제는 링크를 클릭해서 볼 수 있다. 풀이 핵심 풀이 첫 번째 정수 A부터 시작해서 하나씩 증가시키며 입력 문자열과 같은지 확인한다. 첫 번째 정수 A 구하기 A는 1 이상 999 이하의 정수이므로 한 자릿수, 두 자릿수 또는 세 자릿수이다. 먼저 A가 한 자릿수인 경우부터 구한다. A가 한 자릿수이면 start_num은 input_string[0]이다. 이때 정답을 찾지 못했다면 A가 두 자릿수인 경우를 구한다. 이전에 구한 start_num에 입력 문자열의 두 번째 숫자 input_string[1]를 더한다. 두 번째 숫자를 더할 때 input_string[1]은 char 형이므로 int형에 그대로..

[알고리즘] 2022.06.17

백준 6604번: Matrix Chain Multiplication

문제 [BOJ][C++] 백준 6604번: Matrix Chain Multiplication 문제는 링크를 클릭해서 볼 수 있다. 풀이 입력 및 저장 행렬의 개수 n을 입력 받고 이어서 n개의 행렬의 정보를 입력 받는다. 행렬의 정보는 행렬의 이름, 행의 개수, 열의 개수로 이루어져있다. 행과 열을 동시에 저장하기 위해 pair 자료형을 사용했고, 행렬의 이름으로 행렬의 정보를 접근하기 위해 unordered_map을 사용했다. unordered_map은 key의 hash 값으로 value에 접근할 수 있고 탐색 속도는 O(1)이다. 다음으로 예제 입력이 끝날 때까지 입력을 받기 위해 while (cin >> formula) 를 사용했다. string formula; while (cin >> formul..

[알고리즘] 2022.04.27

백준 1431번: 시리얼 번호

문제 [BOJ][C++] 백준 1920번: 수 찾기 문제는 링크를 클릭해서 볼 수 있다. 풀이 stl sort 함수에 compare 함수를 직접 정의해 시리얼 번호를 정렬했다. compare 함수에서 시리얼 번호를 정렬하는 기준은 크게 둘로 나누었다. a와 b의 길이가 다른 경우와 같은 경우. 첫 번째 a와 b의 길이가 다른 경우, a와 b의 길이를 .length()로 구한 뒤 두 길이의 비교값을 반환했다. 두 번째 a와 b의 길이가 같은 경우, get_integer_sum 함수로 a와 b의 자리수 합을 구했다. get_integer_sum 함수는 문자열에서 숫자만 골라내어 그 합을 구하는 함수이다. 구한 두 자리수의 합이 서로 다르다면 두 자리수의 합 비교값을 반환하고, 같다면 a, b 자체 비교값을 ..

[알고리즘] 2022.04.27

백준 1920번: 수 찾기

문제 [BOJ][C++] 백준 1920번: 수 찾기 문제는 링크를 클릭해서 볼 수 있다. 풀이 문제 조건에서 n과 m의 크기는 최대 100,000이다. 시간 제한 1초를 맞추기 위해 시간 복잡도를 고려해야한다. 선형 탐색을 선택할 경우 시간 복잡도는 O(n m)으로 1초의 시간 제한을 넘기게 된다. 따라서 O(log N)의 시간복잡도를 가지는 이분 탐색을 선택했다. 이분 탐색을 선택할 경우 시간 복잡도는 O(n log m)이 되어 시간 제한을 맞출 수 있다. 정수 a들을 a_array에 입력받은 뒤 이분 탐색 알고리즘을 사용하기 위해 a_array를 오름차순으로 정렬했다. left, mid, right는 a_array의 인덱스를 저장한 변수이다. left와 right의 초기값은 각각 0과 n - 1이다...

[알고리즘] 2022.04.27

백준 1157번: 단어공부

문제 [BOJ[C++] 백준 1157번: 단어공부 문제는 https://www.acmicpc.net/problem/1157를 클릭해서 볼 수 있다. 풀이 아스키 코드를 이용하여 문자의 개수를 세는 문제였다. character_count[26] 배열을 만들어 단어에서 'A'부터 'Z'까지 각 문자가 몇 번 나왔는 지 개수를 저장했다. 문자는 index가 0이면 'A', index가 25이면 'Z' 이런 식으로 구분했다. 먼저 소문자와 대문자의 구분을 없앴다. 단어의 길이만큼 반복문을 돌면서 소문자인 경우 아스키 코드값 차이만큼 빼 대문자로 바꾸어 주었다. (소문자는 대문자보다 아스키 코드값이 각각 32 만큼 크다.) 그런 다음 character_count 배열에서 개수를 1씩 더해줬다. 다음은 가장 많이 ..

[알고리즘] 2022.04.27

백준 10026번: 적록색약

문제 [BOJ][C++] 백준 10026번: 적록색약 문제는 https://www.acmicpc.net/problem/10026를 클릭해서 볼 수 있다. 풀이 먼저 적록색약이 아닌 사람이 봤을 때의 구역의 수부터 구했다. 구역을 구하는 과정은 그림을 돌면서 처음 방문하는 노드를 찾아 dfs를 진행했다. 현재 방문한 노드에서 인접 노드 중 방문한 적이 없고, 현재 노드와 색이 같은 인접 노드로 이동했다. 적록색약인 사람이 봤을 때의 구역의 수를 구하기 전에 2가지를 바꿨다. 첫 번째는 적록색약인 사람은 R과 G가 구분되지 않기 때문에 R을 G로 바꿔 그림에서 둘의 차이를 없앴다. 그림을 바꿨기 때문에 구역의 수를 구하는 과정은 적록색약이 아닌 사람이 봤을 때의 구역의 수를 구하는 방법과 같다. 구역의 수를..

[알고리즘] 2022.04.24