[백준] 2292번: 벌집

이미지
문제 https://www.acmicpc.net/problem/2292 풀이 위의 그림에서 빨간 동그라미를 보면 제일 가운데에 있는 빨간 동그라미 안에는 1번 벌집 1개, 그 다음 빨간 테두리 안에는 2번에서 7번까지 6개, 그 다음은 12개, 18개, ... 벌집이 바깥으로 갈수록 6의 배수로 늘어나는 것을 확인할 수 있다. 반복문으로 1+6+12+...를 하면서 이 값이 주어진 n 보다 커질 때를 잘 캐치하면 된다. 결과 코드 https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/2292.cpp

[백준] 1316번: 그룹 단어 체커

이미지
문제 https://www.acmicpc.net/problem/1316 풀이 현재 문자(i)와 다음 문자(i+1)을 비교하여 둘이 같을때는 신경쓰지 않고 달라질때 현재 문자(i)가 이미 방문했던 문자인지 알파벳 개수 만큼 있는 check배열을 확인하여 이미 방문했던 문자였으면(true이면) 현재 문자(i)는 떨어져 있는 문자이므로 그룹 문자가 아니다. 결과 코드 https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/1316.cpp

ASCII 코드 테이블

이미지
출처 위키백과

[백준] 1167번: 트리의 지름

이미지
문제 https://www.acmicpc.net/problem/1167 풀이 1. 루트(1번정점)에서 제일 거리가 먼 정점을 찾는다. 2. 찾은 그 정점에서 다시 제일 먼 정점을 찾는다. 그게 바로 트리의 지름이다! bfs탐색을 2번 하여 진행한다. 거리를 저장하는 배열을 만들어서 시작정점에서부터 모든 정점까지 각 정점과의 거리 를 저장한다. 결과 처음엔 트리의 지름 문제를 이해를 못해서 탐색을 한번만 했다가 틀렸다. 질문검색을 통해 문제를 먼저 이해했다ㅠㅠ (+ 트리의 지름 다른 문제도 있다. 이걸 먼저 풀어보는 것이 더 좋았을뻔했다. https://www.acmicpc.net/problem/1967 ) 탐색을 두번해야한다는 것을 깨닫고 진행하는데 두번째 탐색할때 거리배열이랑 체크배열을 비우지 않고 해서 런타임에러나고.. memset으로 비워야되는구나 하고 했는데 #include <cstring>안해줘서 컴파일에러.. 반성하고있다ㅠㅠ 코드 https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/1167.cpp

[백준] 1717번: 집합의 표현

이미지
문제 https://www.acmicpc.net/problem/1717 풀이 이 문제는 disjoint-set문제로서 union-find로 풀었다. disjoint-set(서로소 집합) : 교집합이 공집합인 집합 Union(a, b) : a가 속한 집합과 b가 속한 집합을 합집합 Find(a) : a가 속한 집합의 번호를 반환 i 1 2 3 4 5 6 7 arr[i] 1 2 3 4 5 6 7 입력 n = 7일때, 서로소 집합의 초기값은 위의 표와 같이 되어있다. Find(1)을 하면 arr[1]==1이므로 1을 return한다. 만약에 같지 않을 경우, 재귀적으로 원소의 부모를 쫓아 올라간다. Union(1, 3)을 하면 먼저 Find를 각각한다. 그러면 pa=1, pb=3이 된다. 둘은 다른 그룹에 있기 때문에 arr[1]=3으로 그룹 번호를 업데이트 해준다. i 1 2 3 4 5 6 7 arr[i] 3 2 3 4 5 6 7 이런 식으로 쭉 진행한다. union-find를 이용하여 kruskal algorithm으로 mst찾는데 쓰인다. 결과 Union연산에서 if(pa != pb) 면 그룹번호를 갱신하도록 조건이 있는데 시간을 단축시키기 위함이다. 이 문제에서는 없어도 맞았다고 한다! 코드 https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/1

[백준] 10815번: 숫자 카드

이미지
문제 https://www.acmicpc.net/problem/10815 풀이 1920 번과 똑같은 문제라고 할 수 있다. 이분탐색이다. 결과 코드 https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/10815.cpp

[백준] 1920번: 수 찾기

이미지
문제 https://www.acmicpc.net/problem/1920 풀이 이분탐색(Binary Search)로 풀었다. 이분탐색은 정렬되어있는 데이터를 반으로 나누어 탐색하는 방법으로서 오름차순으로 정렬되어있어야한다. sort함수(퀵소트)로 O(nlogn) 시간에 정렬을 해주고 이분탐색으로 O(logn) 시간으로 수를 찾는다. 근데 어차피 입력받을때 O(n+m) 시간이 걸린다.ㅜ 이분탐색은 유용하게 잘쓰이고 중요하니까 자유자재로 쓸 수 있을때까지 연습많이 해야겠다. 결과 코드 https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/1920.cpp