본문 바로가기

알고리즘/Baekjoon

(196)
[1021]. 회전하는 큐 [1. 문제설명] 연산1: 첫번째 원소를 제거한다. 연산2: 첫번째 원소를 왼쪽으로 한칸 이동 연산3: 마지막 원소를 오른쪽으로 한칸 이동 큐에 처음 포함되어 있던 수가 N 개, 뽑고자 하는 원소의 위치가 입력으로 주어 질 때, 원소를 주어진 순서대로 뽑아내는데 필요 한, 2번, 3번 연산의 최소 값을 출력 [2. 풀이 접근] 완전 탐색 => deque 에 첫번째 원소가 찾고자 하는 원소인 경우, 연산 1 수행 후, 다음 재귀 호출 => 위 경우가 아닌 경우, 연산 2 수행 후 기존 deque 복원 후, 연산 3 수행 ==> 문제점, 무한 루프 발생 == ==> 2번 연산 수행 후 재귀 호출 시 연산 3을 수행 할 경우, 원래 상태로 복원 되버림 ==> 일종의 cycle 이 발생 함. 완전 탐색 Cycl..
[1316] 그룹 단어 체커 [1. 문제 재정의 및 추상화] 문제에서 정의하는 그룹 단어 => 단어에 존재하는 모든 문자에 대해서 각 문자가 연속해서 나타나는 경우 => kin: k, i, n 이 한번씩 연속해서 나타나므로 그룹 단어 => aabbbccb: b 가 불연속이므로 그룹 단어가 아님 입력으로는 단어의 개수 N 이 맨 처음줄에 있고, 그 밑으로 N 만큼 단어가 주어짐 1 0 { input, _ := r.ReadString('\n') input = strings.TrimRight(input, "\r\n") TC-- count += isGroupWord(input) } fmt.Println(count) }
[2941] 크로아티아 알파벳 [1. 문제 재정의 및 추상화] 크로아티아 알파벳을 특정한 패턴으로 변경 할 수 있음. 단어가 주어졌을 때 크로아티아 알파벳 개수를 세야함 테이블에 주어지지 않은 알파벳은 한 글자씩 세야함 입력은 최대 100개 의 단어로 구성되며, 알파벳 소문자와 '-', '=' 으로만 이루어 짐. 입력이 몇개의 크로아티아 알파벳으로 이루어져 있는지 출력해야 함 [2. 해결 계획] 변환 된 패턴을 정의하는 배열을 구성 입력된 문자열에 앞에서 부터 (1) 에서 정의 된 패턴과 매치되는 것이 있는지 확인 있으면, 해당 길이만큼 slice 를 부분 슬라이스하고, 없는 경우 1 만큼만 부분 슬라이스함 위 과정에서 알파벳 개수를 세야함. [3. 계획 검증] [4. 구현] package main import ( "bufio" "f..
[1157] 단어 공부 [1. 문제 재정의 및 추상화] 알파벳 대소문자로 구성된 단어가 주어짐 이 단어에서 대소문자 구분 없이 가장 많이 사용된 알파벳을 찾아야 함 주어지는 단어의 최대 길이는 1,000,000 가장 많이 사용된 알파벳을 대문자로 출력해야 함 단, 가장 많이 사용된 알파벳이 여러개인 경우 ? 를 출력해야 함. [2. 해결 계획] 입력의 최대 길이가 1M 이므로 GO 언어를 기준으로 단순히 fmt.Scanf 를 사용하는 것이 시간초과를 유발 할 수 있음. bufio 를 이용해서 io 시간을 단축해야 함. 각 알파벳의 사용 빈도수를 정렬해서 max 가 여러개인 경우를 확인해야 함. [3. 계획 검증] [4. 구현] package main import ( "bufio" "bytes" "fmt" "os" ) func ..
[1065] 한수 [1. 문제 재정의 및 추상화] 문제에서 한수에 대한 정의 => 어떤 양의 정수 X의 각 자리가 등차수열을 이루는 수 요구사항 => N 이 주어졌을 때 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력 1
[4673] 셀프 넘버 [1. 문제 재정의 및 추상화] d(n) = n + {n 의 각 자리수의 합} ex) d(75) = 75 + 7 + 5 = 87 여기서 n 을 d(n) 의 생성자라 하며, 생성자가 없는 숫자를 셀프 넘버라 한다. ex) 1, 3, 5, 7, 9, ... 요구사항 => 10000보다 작거나 같은 셀프 넘버를 한줄씩 출력해야 함. [2. 해결 계획] 셀프 넘버는 생성자가 없으므로, d(n) 수열에서 가장 처음에 온다 할 수 있다. 계산된 d(n) 은 셀프 넘버가 아니므로, 출력하지 않도록 한다. 10K+1 길이를 갖는 배열을 생성하고, 셀프 넘버인 n 을 index 로 하는 경우 그 값을 0으로하고, 셀프 넘버가 아닌 경우 그 생성자를 저장하도록 한다. [3. 계획 검증] 메모리 제한은 크게 상관 없어 보임..