본문 바로가기

전체 글361

[004]Jewels and Stones 문제: https://leetcode.com/explore/challenge/card/may-leetcoding-challenge/534/week-1-may-1st-may-7th/3317/ 'a' ~ 'Z'까지의 알파벳의 상태를 관리하기 위해 아스키코드를 포함한 1바이트를 사용하면 됩니다. 알파벳이 나타날 때 마다 배열의 갯수를 증가시킨 후 쥬얼리 값에 모두 합산해주면 됩니다. class Solution { public: int numJewelsInStones(string J, string S) { int stoneState[128] = {0,}; for (int i = 0; i < S.length(); ++i) { int idx = S[i]; stoneState[idx]++; } int ret = 0;.. 2020. 5. 17.
[BOJ]1194번: 달이 차오른다, 가자. 문제: https://www.acmicpc.net/problem/1194 비트 연산자 + BFS 문제입니다. A~F는 6개의 문자로 {공집합, ... , {a,b,c,d,e,f} } 까지의 부분집합은 2^6 = 64개로 나타낼 수 있습니다. 총 64개의 state가 존재한다고 표현하겠습니다. 그래서 [64][N][M] 만큼의 방문(상태)배열이 존재하게 됩니다. 그러면 각 칸을 순회할 때 가지고 있어야 할 정보는 아래와 같이 네 가지 정보입니다. { 현재 STATE(0~64), Y좌표, X좌표, MOVE_CNT } 열쇠칸을 만났다면 OR 연산자를 통해 현재 STATE에 특정 열쇠를 더해줍니다. int NEW_STATE = NOW_STATE | (1 2020. 5. 17.
[깡구현] STACK 문제: https://www.acmicpc.net/problem/10828 t (=top)라는 변수 하나만 가지고 스택을 컨트롤하면 됩니다. 스택이 비어있는 조건은 top이 초기값일 때 입니다. #define STACK_SIZE 10005 typedef struct STACK { int S[STACK_SIZE]; int t, sz; STACK() : t(-1), sz(0) {} bool empty() { return (t == -1); } int size() const { return sz; } void push(int val) { S[++t] = val; sz++; } int top() { if (empty()) return -1; else return S[t]; } int pop() { if (emp.. 2020. 5. 16.
[깡구현] QUEUE_2 문제: https://www.acmicpc.net/problem/10845 값을 넣을 때는 r (=rear)을 사용합니다. 값을 뺄 때는 f (=front)을 사용합니다. 큐가 비어있는 조건은 front == rear 일 때 입니다. #define QUEUE_SIZE 100001 typedef struct QUEUE { int Q[QUEUE_SIZE]; int f, r, sz; QUEUE() { f = r = sz = 0; } bool empty() { return (f == r); } int front() { if (empty()) return -1; else return Q[f]; } int back() { if (empty()) return -1; else return Q[(r-1 + QUEUE_S.. 2020. 5. 16.