반응형

알고리즘 47

[알고리즘 이론] 비트마스크(BitMask)

비트마스크(BitMask) 비트마스크(BitMask)는 정수의 이진수 표현을 자료구조 처럼 사용하는 기법이다. 0과 1을 이용하여 비트를 표현하며 해당 비트가 0인 경우 "꺼져있다", 1인 경우 "켜져있다" 라고 말한다. 비트마스크의 장점 수행 시간이 빠르다 - 비트 연산이므로 O(1)에 구현되는 연산들이 많다 메모리 효율성 - 하나의 정수는 32비트기 때문에 2^32 가지의 표현이 가능하다. 코드의 간결성 비트마스크를 이용한 집합 구현 집합 구현은 비트마스크의 가장 대표적이고 중요한 사례이다. 하나의 비트는 원소 하나를 의미하게 되며 비트가 켜진 경우 포함, 꺼진 경우 미포함을 의미한다. 즉, N비트 정수 변수는 N개의 원소를 가지는 집합의 부분집합들을 모두 표현할 수 있다. 이는 N개의 bool형 원..

[BOJ] 1062 - 가르침

https://www.acmicpc.net/problem/1062 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net #include using namespace std; bool alpha[26] = {false, }; vector words; vector new_alpha; vector results; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; for(int i = 0; i < n; i++){ s..

알고리즘/BOJ 2022.08.01

[BOJ] 4179 - 불!

https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문 www.acmicpc.net #include #include #include using namespace std; int r, c; int cnt = 0; string board[1001]; int board_fire[1001][1001]; int board_path[1001][1001]; int dx[4] = {-1, 0, 1, 0}; int dy[4] = {0, 1, 0, -1}; queue path; qu..

알고리즘/BOJ 2022.07.10

[BOJ] 2580 - 스도쿠

https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net #include #include using namespace std; int cnt = 0; bool flag = false; int board[9][9] = {0, }; vector blank; bool check(int x, int y){ int square_x = x % 3; int square_y = y % 3; for(int i = 0; i < 9; i++){ if(board[x][i] ..

알고리즘/BOJ 2022.07.04

[BOJ] 1339 - 단어 수학

https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net #include #include #include #include using namespace std; bool desc(int a, int b){ return a > b; } int alpha[26] = {0, }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector v; for(int i = 0..

알고리즘/BOJ 2022.07.01

[BOJ] 2941 - 크로아티아 알파벳

https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net import sys alpha = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] input = list(sys.stdin.readline().rstrip()) input.reverse() sum = 0 while len(input) > 1: str = input.pop() if str == 'c' or str == '..

알고리즘/BOJ 2022.06.27

[BOJ] 단계별로 풀어보기 - 기본 수학 1

지난 겨울방학때 풀고 개강 후 손을 놨던 백준을 다시 풀기로 마음먹었다. 너무 오랜만이라 뇌가 안돌아갈 것 같아서 적당히 뇌를 깨울 수 있는 기본 수학1을 풀어보았다. 파이썬과 C++ 둘다 짜는 것을 연습하고 있지만 수학 문제는 두 언어에서 구현이 다를 것 같지 않아 C++로만 짰다. 마지막 문제 빼고는 코딩적으로 얻어가는 건 없었지만 상당히 재밌었기에 한번에 몰아서 포스팅한다. https://www.acmicpc.net/problem/1712 1712번: 손익분기점 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 www.acmicpc.net #include usi..

알고리즘/BOJ 2022.06.27

[알고리즘 이론] 최단 경로 알고리즘(2) - 플로이드 워셜 알고리즘

최단 경로 문제 최단 경로 알고리즘은 가장 짧은 경로를 찾는 알고리즘이다. 최단 경로 문제의 상황은 다음과 같이 다양하다. 한 지점에서 다른 한 지점까지의 최단 경로 한 지점에서 다른 모든 지점까지의 최단 경로 모든 지점에서 다른 모든 지점까지의 최단 경로 최단 경로 문제는 보통 그래프를 이용해 표현하는데 각 지점은 그래프에서 노드로 표현되고, 지점 간 연결된 도로는 그래프에서 간선으로 표현된다. 또한 실제 코딩 테스트에서는 최단 경로를 모두 출력하는 문제보다는 단순히 최단 거리를 출력하도록 요구하는 문제가 더 많이 출제된다. 따라서 포스팅에서도 최단 경로가 아닌 최단 거리를 출력하는 코드를 구현할 것이다. 컴퓨터공학과 학부 수준에서 사용하는 최단 거리 알고리즘은 다익스트라 최단 경로 알고리즘, 플로이드..

[알고리즘 이론] 최단 경로 알고리즘(1) - 다익스트라 최단 경로 알고리즘

최단 경로 문제 최단 경로 알고리즘은 가장 짧은 경로를 찾는 알고리즘이다. 최단 경로 문제의 상황은 다음과 같이 다양하다. 한 지점에서 다른 한 지점까지의 최단 경로 한 지점에서 다른 모든 지점까지의 최단 경로 모든 지점에서 다른 모든 지점까지의 최단 경로 최단 경로 문제는 보통 그래프를 이용해 표현하는데 각 지점은 그래프에서 노드로 표현되고, 지점 간 연결된 도로는 그래프에서 간선으로 표현된다. 또한 실제 코딩 테스트에서는 최단 경로를 모두 출력하는 문제보다는 단순히 최단 거리를 출력하도록 요구하는 문제가 더 많이 출제된다. 따라서 포스팅에서도 최단 경로가 아닌 최단 거리를 출력하는 코드를 구현할 것이다. 컴퓨터공학과 학부 수준에서 사용하는 최단 거리 알고리즘은 다익스트라 최단 경로 알고리즘, 플로이드..

[BOJ] 2579 - 계단 오르기

https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net n = int(input()) data = [0] * 300 for i in range(n): data[i] = int(input()) dp = [0] * 300 dp[0] = data[0] dp[1] = data[0] + data[1] dp[2] = max(data[0] + data[2], data[1] + data[2]) for i in range(3, n): dp[i] = max(dp[i - 2] + d..

알고리즘/BOJ 2022.02.18
반응형