본문 바로가기

find7

[백준 1269/c++] 대칭 차집합 처음에 map 을 이용해서 ++ -- 로 카운트 했더니 테스트 케이스에 같은 수가 중복이 있었는지 에러가 떴다 중복일 경우도 차집합에서 한번에 다 사라지게 해야하므로 중복 자체를 없애기 위해 set 에 넣어서 find 로 카운트, 카운트 한 수는 양 집합 모두에 있는 것이므로, 두 집합을 더한 후 카운트x2 로 양쪽에 있는 만큼 빼주면 차집합의 원소 개수 완성이다 https://www.acmicpc.net/problem/1269 1269번: 대칭 차집합 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어 www.acmicpc.net #include using .. 2022. 7. 25.
[백준 5525/c++] IOIOI - 문자열 - 탐색 - 부분 점수 연산 시간을 줄여서 최소한의 연산으로 문자를 탐색하는 로직을 만드는 문제였다 조건에 부분 만족 시 부분 점수를 주는 서브 테스크 문제로서, 부분 점수 50점의 조건은 논리에 이상이 없는지, 100점은 일정 시간내에 풀 수 있는지 였다 find를 통해 이전 문자 탐색처럼 코드를 짜니 시간복잡도가 높아 부분점수를 받았고, ' I ' 이후에 오는 문자들이 IO라는 조건에 맞을 시 그 문자들이 n개 이상이 되어 원하는 문자의 길이를 충족하는지를 앞에서 부터 문자를 하나씩 옮겨가며 충족 시 IO의 문자 수 만큼인 2만큼 인덱스를 추가하여 계속 카운트 해나가는 방식으로 풀면 시간내에 풀 수 있는 문제였다 https://www.acmicpc.net/problem/5525 5525번: IOIOI N+1개의 I와 N개의.. 2022. 6. 24.
[백준 1543/c++] 문자 검색 - 문자열 stirng 의 내장 멤버함수인 find를 사용해서 해당 중복 인덱스를 찾고, 그 새 인덱스로 검색 시작 인덱스를 갱신하며 카운트 하는 문제였다 생각보다 쉽게 풀이가 가능했다 #include using namespace std; int main(){ string s; string t; int cnt=0; int nbe=0; getline(cin, s); getline(cin, t); while(s.find(t, nbe)!=string::npos){ nbe=s.find(t, nbe) + t.length(); cnt++; } cout 2022. 6. 24.
[프로그래머스 1 / c++] 완주하지 못한 선수 해쉬 문제로 유명한 문제이다 참가자와 완주자 명단을 비교하여 완주하지 못한 선수 이름을 찾는 문제이다 쉽게 이름 별로 인원 수를 카운트 하기위해서 unordered_map 을 사용하여 map을 만들고, 범위지정 for 문으로 참가자 명단을 돌며 map에 이름이 없으면 이름을 넣고 1로 초기화 해주기 위해 맵을 돌며 이름을 find 하고 이름이 없으면 반복자가 end()위치와 같으므로 조건을 지정 후 map(이름, 1) 해준다 for문 수행 중 맵에 이름이 있다면 그 이름의 벨류를 1 올려주어 중복을 알 수 있다(하지만 이 문제는 안쓰인다) 다시 범위지정으로 완주자를 돌며 완주자 이름당 벨류를 1씩 빼준다 for문으로 맵에서 혹은 참가자에서(둘 다 이름 목록이 같으므로 둘 중 하나를 골라 돌자) 이름을 다.. 2022. 6. 19.