전체 글 129

[Unity] 소수점 처리

소수점 처리가 필요한 경우는 아래와 같이 장인의 기운을 표시할 때 사용할 수 있다. 이럴 때 바로 포맷 함수를 이용하면 편하다. 장인의 기운이 30.13333 이라고 할 때 다음과 같이 소수점 둘째 자리까지 표기는 아래와 같이 하면 된다. using System; craftsmanship.text = string.Format("{0:0.##}", 표기할 수치) + "%"; Format 콜론 앞에 있는 부분은 Format에 들어갈 매개변수 콜론 뒤에 부분은 소수점 자릿수를 표시 '#'은 값이 있으면 표시하고 없으면 표시하지 않는다.

Unity 2021.04.14

[백준 4889] 안정적인 문자열 (C++)

풀이 스택에 문자열을 하나씩 집어넣으면서 괄호 쌍("{}")이 맞다면 스택을 비워주고, 아니라면 계속해서 스택에 넣어준다. 모든 문자열을 다 순환했을 때, 스택이 비어있다면 주어진 문자열은 모두 안정적인 문자열이다. 스택이 비어있지 않다면 여는 괄호를 닫는 괄호로 바꾸거나, 닫는 괄호를 여는 괄호로 바꾸는 연산을 해야 한다. 몇 번 손으로 쓰다 보면 규칙을 찾을 수 있다. { { 나 } } 는 1번 만에 안정적인 문자열을 만들 수 있지만 } { 는 2번 연산을 적용해야 안정적인 문자열을 만들 수 있다. #include #include #include using namespace std; int main() { string s; int n = 0; int cnt = 0; while (getline(cin,..

Algorithm 2021.04.13

[백준 2304] 창고 다각형 (C++)

풀이 약간 도미노를 생각하면 편할 것 같다. 왼쪽부터 간다고 생각하면 다음과 같다. 3 ~ 4 의 구간은 비록 높이가 0인 다각형이지만 2 ~ 3 구간에서의 높이가 4이기 때문에 3 ~ 4 구간의 높이도 4가 된다. 5 ~ 6 의 구간은 비록 높이가 3인 다각형이지만 4 ~ 5 구간에서의 높이가 6이기 때문에 5 ~ 6 구간의 높이도 6이 된다. 즉 나보다 한 칸 옆에서의 높이가 나의 높이보다 크다면 그것으로 갱신해준다. for (int i = 1; i = 0; i--) area[i] = min(area[i], max(height[i], area[i + 1])); 왼쪽과 오른쪽을 통해서 얻은 area 를 다 더해주면 창고 다각형의 넓이를 구할 수 있게 된다. #include #include using n..

Algorithm 2021.04.12

[C++] unordered_set

특징 1. 자동적으로 정렬되지 않는다. 2. hash 사용으로 bucket 으로 인해 메모리 사용량 증가 3. insertion, deletion, find O(1)에 수행, 다만 충돌이 너무 많이 일어나면 O(N) (그러면 기존 set 보다 더 느리게 수행될 수 있다는 말이다.) 4. hash 자료구조를 사용한다. 원소의 개수가 많을수록 해시 충돌이 일어날 확률도 많아지게 되므로 경우에 따라 사용하자. 원소의 개수가 적고 빠른 성능 : unordered_set 원소의 개수가 많고 안정성 : set Hash function 정의는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수. unordered_set 에 특정 value 를 찾거나 넣을 때 해당 value 를 hash function 에 ..

CS/Data Structure 2021.04.12

[백준 2841] 외계인의 기타 연주 (C++)

풀이 stack 자료구조를 사용하면 쉽게 해결할 수 있다. 줄이 1 ~ 6이므로 stack을 배열처럼 사용하면 여러 개의 stack 줄이 생기게 된다. 현재 top과 치려고 하는 프렛의 번호를 비교해서 count를 매기면 된다. 치려고 하는 프렛의 번호를 b라고 하면 top() > b 이면, pop 해주고 count++ top() == b이면, 굳이 손을 다른 프렛으로 옮기지 않아도 되므로 패스 top() > n >> p; int cnt = 0; f..

Algorithm 2021.04.10

스택의 응용 - 후위 표기식

스택의 응용 중 하나인 후위 표기식에 대해서 배워보자. 후위 표기식 우리가 자주 사용하는 표기식은 중위 표기식(infix expression)을 따른다. 5 + 3 후위 표기식(postfix expression)은 연산자가 피연산자 뒤에 나오는 것을 말한다. 5 3 + 후위 표기식 계산법 7 4 -3 * 1 5 + / * 스택 자료구조를 이용해서 계산할 수 있다. 핵심은 두 수를 뽑을 때의 순서가 중요하다. 방법은 다음과 같다. 1) 피연산자(즉, 숫자)가 들어오면 무조건 출력 2) 연산자가 들어오면 스택의 최상단에서 두 값을 뽑아 연산자에 맞게 계산하고 다시 스택에 넣어준다. 단계별로 확인해보자. input : 7 4 -3 * 1 5 + / * Stack 7 7 4 7 4 -3 7 -12 ( * 연산자..

CS/Data Structure 2021.04.09

[백준 10799] 쇠막대기 (C++)

풀이 이 문제는 그림을 그리면서 살펴봐야 쉽게 풀 수 있다. 아래 그림을 보면, 가장 위에 있는 숫자는 현재 막대기의 수를 의미한다. 아래의 숫자는 현재 레이저로 쐈을 때 절단되는 막대기의 수이다. 여는 괄호가 들어오면 stack에 push 한다. 닫는 괄호가 들어오면 다음과 같이 판단한다. 닫는 괄호 이전의 괄호가 여는 괄호였다면 pop을 하고 나서 정답에 +stack.size()를 해준다. 닫는 괄호 이전의 괄호가 여는 괄호가 아니라면 pop을 하고나서 정답에 +1을 해준다. #include #include #include using namespace std; int main() { string s; cin >> s; stack st; int cnt = 0; for (int i = 0; i < s.l..

Algorithm 2021.04.08

[백준 1874] 스택 수열 (C++)

풀이 문제부터 이해해보자. 핵심은 스택을 이용해서 원하는 숫자를 만들 수 있는지? 아닌지이다. input 8 4 3 6 8 7 5 2 1 output + + + + - - + + - + + - - - - - 하나씩 차근차근 진행해보면, 4를 만들기 위해서는 push 4번, pop 1번 + + + + Stack [1, 2, 3, 4] + + + + - Stack [1, 2, 3] 3을 만들기 위해서는 pop 1번 + + + + - - Stack [1, 2] 6을 만들기 위해서는 push 2번, pop 1번 + + + + - - + + Stack [1, 2, 5, 6] + + + + - - + + - Stack [1, 2, 5] 8을 만들기 위해서는 push 2번, pop 1번 + + + + - - + + ..

Algorithm 2021.04.08

[백준 3187] 양치기 꿍 (C++)

풀이 맵에서 울타리 '#'가 아닌 지역을 시작점으로 탐색을 해서 양과 늑대의 수를 체크한다. 이때 양의 수가 늑대의 수보다 많다면 양이 싸움에서 이기는 것이고, 양의 수가 늑대의 수보다 작거나 같다면 양이 싸움에서 지는 것으로 구현하면 된다. #include #include using namespace std; int r, c, wolf, sheep; char field[251][251]; bool vis[251][251]; int dx[] = { 0,0,-1,1 }; int dy[] = { 1,-1,0,0 }; void findSheepAndWolf(int x, int y) { int w = 0, s = 0; queue q; q.push({ x,y }); vis[x][y] = true; while (!..

Algorithm 2021.04.05