본문 바로가기

baekjoon

(4)
[baekjoon 백준] 1043 - 거짓말 : c++ 문제풀이 진실을 아는 사람과 그 사람과 파티에서 만난 적이 있는 사람이 있는 파티는 모두 제외해야 한다. 1. bfs -> 노드끼리 연결 여부를 표시하는 map을 그려서 처음 주어진 진실을 아는 사람을 시작으로 bfs탐색을 돌린다. 연결 여부는 51*51 2차원 리스트로, 진실을 아는 사람은 1차원 리스트로 표현하고, 파티 참석자는 2차원 vector에 입력을 받았다. 코드->#include #include using namespace std; bool map[51][51]; bool knowing[51]; vector party; int main() { //사람 수, 파티 수 입력 받기 int person_num, party_num; cin >> person_num >> party_num; //최초 답 = 파티..
[baekjoon 백준] 1167 - 트리의 지름 : c++ 문제풀이 하... 이 문제는 일단 약 한 달 전에 풀이했던 문제고, 미리 정리를 제대로 안했던 것이 매우 후회가 되는... (이걸 제대로 이해했다면 아마 1월 라피신 마지막 시험 마지막 문제도 풀어낼 수 있지 않았을까하는 네네...ㅠ) 이 문제는 이전에 많이 풀어 봤던 최단거리 구하기가 아니라 트리의 지름이 될 수 있는 최대거리를 구해야하는 문제이다. 하지만 풀이 방식은 거의 그대로이다. dfs탐색에서 최단 거리가 아니라 최대 거리를 갱신하며 탐색한다는 정도? 마지막에 한 단계 더 생각해야 하는 점은 있다! 코드 -> #include #include #include //fill함수 using namespace std; //map배열에 1~v정점에 연결된 간선정보 pair vector로 넣기 vector map[1..
[baekjoon 백준] 5430 - AC : c++ 문제풀이 이젠 골드 이상 문제만 풀기로 마음먹었다...! 1. 필요한 자료구조가 무엇인가? : 처음에는 delete가 앞에서만 이루어 지길래 queue인 줄 알았으나... "reverse하려면 queue 뒤에서 부터 숫자를 빼고 새로운 queue에 차곡차곡 넣어줘야 하잖아??" > n; for (int i=0; i> p; cin >> len; cin >> v; int idx =1; //입력받은 v deque로 처리 string stmp=""; //임시 문자열 int res = 1; //index 1부터 읽기 //stmp에 숫자 문자열로 저장했다가 쉼표만나면 deque에 push while(v[idx] != ']'){ if(v[idx] == ','){ d.push_back(stoi(stmp)); stmp=""; }..
[baekjoon 백준] 1107 - 리모컨 : c++ 문제풀이 문제 접근: 1. 목표 채널 번호 또는 목표 채널 가장 가까이 접근해서 경우의 수를 비교하며 누르는 버튼의 최소 수를 갱신 2. 일단 고장난 버튼이 포함되면 제외 3. 누르는 버튼의 최소수 -> 기본값: 처음 위치 100에서 +-로 접근 -> 근접한 채널로 이동(채널번호의 자릿수 계산) + +-로 이동(목표 채널과의 차이 계산) 목표채널이 고장난 버튼의 숫자를 포함하고 있을 때가 문제상황 -> 그럼 목표 채널의 앞뒤를 왔다 갔다하며 최소 수를 구할 것인가..? -> 쫌 복잡함.. 목표 채널에 근접한 채널에 포함된 숫자 버튼들이 모두 고장났을 경우는 어차피 앞뒤로 수 많은 경우의 수를 훑어야함 -> 그냥 모든 경우의 수 (0 ~ (500000-100)*2 정도) 훑는게 속 편하다~ -> 결론은 brute ..