[백준] 1021번 Silver3 회전하는 큐, C++ 코드
·
Algorithm/BOJ
auto it = find(deque.begin(), deque.end(), target_num);int index = it - deque.begin(); 위 코드가 핵심이었다.파이썬과 달리 rotate가 없으므로, deque의 pop_front - push_back, pop_back-push_front를 결합해 사용하면 될 듯 하다.단순히, 왼쪽 경계에 가까우면 왼쪽으로 회전, 오른쪽 경계에 가까우면 오른쪽으로 회전하는 문제였다. #include #include #include using namespace std;int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; deque d; f..
[백준] 1969번 Silver 4 DNA, C++ 코드
·
Algorithm/BOJ
열을 기준으로 최빈값인 문자들을 조합해 최적의 문자열을 만드는 것이 핵심이었다.문제를 처음에 잘못 이해해서 잘못 풀었던... map는 DefaultDict처럼 value인 int값이 0으로 시작하는 것이 특징이다.map['c']++; 도 가능하다. 해결한 코드는 아래와 같다.#include #include #include using namespace std;int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n; cin >> m; vector vec; for (int i = 0; i > s; vec.push_back(s); } string result_str = ""; ..
[백준] 17413번 Silver 3 단어 뒤집기 2, C++ 코드
·
Algorithm/BOJ
단순한 조건문으로 풀었다. 더 깔끔한 방법이 있을 듯하다.1. '2. '>'를 만나면 `isTag`를 false로 하고 '>'를 `result`에 붙인다.3. 만약 isTag가 true라면 현재 문자를 result에 붙인다.4. 만약 isTag가 false이고 현재 문자가 공백이라면 buf에 있는 내용을 뒤집어 `result`에 붙이고 공백도 같이 붙여준다. 이때, 버퍼를 비운다.5. isTag가 false인 경우고 공백이 아니라면 buf에 현재 문자를 붙인다. 만약 buf에 남아있는 문자가 있는데 for문이 끝나는 경우가 있을 수 있으니, 마지막에는 buf에 있는 내용을 뒤집어 `result`에 붙인다. #include #include using namespace std;int main() { i..
[백준] 1629번 Silver 1 곱셈, Java 코드
·
Algorithm/BOJ
solved.ac의 Class 4 문제 중 곱셈 문제이다. 자연수 A를 B번 곱한 수를 C로 나눈 나머지를 구하는 문제이다. 여기서 생각을 해야 하는 것은 그냥 (A^B)% C를 구했다가는 시간 초과가 발생한다는 점이다.그렇다면 어떻게 구해야 하는가? 모듈러 산술 연산의 특징 (a * b) % c = (a % c * b % c) % c을 이용해 구해볼 것이다. 예를 들어 A^6인 경우,A^6 = A^3 * A^3으로 나누고,A^3 = A ^1 *  A^1  *  A로 또 나누어 구한다.즉, 재귀의 방식으로 구할 것이다. 문제를 풀 때, 참고했던 블로그는 아래와 같다.https://st-lab.tistory.com/237 [백준] 1629번 : 곱셈 - JAVA [자바]www.acmicpc.net/prob..
[백준] 1149번 - Silver 1 RGB거리, 파이썬 코드
·
Algorithm/BOJ
solved.ac의 Class 4 문제 중 RGB거리 문제이다.문제 조건 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구하는 문제이다.1번 집의 색은 2번 집의 색과 같지 않아야 한다.N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.i(2 ≤ i ≤ N-1) 번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.이전 집의 색과 현재 집의 색은 같으면 안 되므로 R, G, B로 경우를 나누어 계산해야 한다.즉, 현재 집과 같은 색을 제외한 값들의 최솟값과 현재 자신의 값을 더하면 된다.  해결했던 코드는 다음과 같다.  import sysif __name__ ..
[백준] 16953번 - Silver 2 A -> B, 파이썬 코드
·
Algorithm/BOJ
solved.ac의 Class 4 문제 중 A → B 문제이다.문제 조건정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.2를 곱한다.1을 수의 가장 오른쪽에 추가한다. A를 B로 바꾸는데 필요한 연산의 최솟값을 구하는 문제이다.dfs를 사용하되, 인자로 현재 계산값과 연산의 횟수를 인수로 가지고 있어야 한다고 생각하고 문제를 풀었다.즉, (2를 곱한 값과 현재 연산 횟수+1)와, (10를 곱하고 +1 한 값과 현재 연산 횟수+1)을 인수로 주면서 각각 재귀함수를 하면 된다고 생각하고 문제를 풀었다.  해결했던 코드는 다음과 같다. import sysglobal a, bresult = []def dfs(n, cnt): # n의 값이 b보다 커졌을 경우는 더 이상 진행 X ..
[백준] 15663번 - Silver 3 N과 M (9), 파이썬 코드
·
Algorithm/BOJ
solved.ac의 Class 4 문제 중 N과 M(4) 문제이다.1부터 비내림차순으로 내려가야 하는 특징 때문에 재귀 DFS 문제라는 것을 알 수 있다."한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다." 라는 주의사항이 있으니 조심하자. 해결했던 코드는 다음과 같다.import sysglobal n, mnumbers = []lst = []visited = []def dfs(): before = 0 if len(lst) == m: print(*lst) return for i in range(n): if before != numbers[i] and not v..
[백준] 15654번 - Silver3 N과 M(5), 파이썬 코드
·
Algorithm/BOJ
solved.ac의 Class 4 문제 중 N과 M(5) 문제이다. 주어진 숫자들을 정렬한 리스트를 재귀 백트래킹하는 문제라는 것을 알 수 있다." 수열은 사전 순으로 증가하는 순서로 출력해야 한다. "이라는 문제의 특징이 있으니 조심하자. 해결했던 코드는 다음과 같다.import sysglobal n, mnumbers = []lst = []def backtracking(d): # d가 m과 같아지면 return if d == m: print(" ".join(map(str, lst))) return for i in range(n): if numbers[i] in lst: continue; lst.append(numbers[i]) ..
[백준] 15650번 - Silver 3 N과 M (2), 파이썬 코드
·
Algorithm/BOJ
solved.ac의 Class 4 문제 중 N과 M(2) 문제이다. 1부터 비내림차순으로 내려가야 하는 특징 때문에 재귀 DFS 문제라는 것을 알 수 있다."1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열"이라는 문제의 특징이 있으니 조심하자. 해결했던 코드는 다음과 같다. import sysglobal n, mlst = []def dfs(num): # 리스트의 개수가 m과 같아지면 return if len(lst) == m: print(" ".join(map(str, lst))) return for i in range(num+1, n+1): lst.append(i) dfs(i) lst.pop()if __name__ ..
rosebleue
'Algorithm' 카테고리의 글 목록 (2 Page)