현재 문자(i)와 다음 문자(i+1)을 비교하여 둘이 같을때는 신경쓰지 않고
달라질때 현재 문자(i)가 이미 방문했던 문자인지
알파벳 개수 만큼 있는 check배열을 확인하여
이미 방문했던 문자였으면(true이면) 현재 문자(i)는 떨어져 있는 문자이므로
그룹 문자가 아니다.
https://www.acmicpc.net/problem/10989 수의 개수의 범위가 10,000,000까지 이므로 단순히 배열에 저장하여 sort를 하게 되면 메모리 초과가 뜬다. 그래서 다른 방법으로 10,000보다 같거나 작은 자연수로 이루어져 있다는 조건에 따라 배열을 10,000만큼 할당해두고 해당하는 자리에 1씩 증가하였다. 그러면 저절로 인덱스를 따라 오름차순으로 정렬이 의도치않게 될것이고 출력도 인덱스를 출력하면된다. 코드↓ https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/10989.cpp
문제 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
댓글
댓글 쓰기