본문 바로가기

map14

[프로그래머스 2 / c++] 전화번호 목록 - 해시 해쉬를 이용해서 풀라는 문제 같은데, 정렬을 사용 후 앞뒤만 비교하는 것이 더 효율적인 함정 문제이다 하지만 배우는 입장에서는 두 경우 모두 배울점이 많았다 정렬은 sort 후 다음 요소에 이전 요소를 find하여 0인지로 접두어를 찾는 아이디어!(없으면 ::npos가 나올 것이다) 해시는 아직 사용 경험도 부족한 만큼 원리이해와 key값이 없을때 key가 map에 추가되고 0의 value를 갖는점, substr 을 루프에 활용하는 아이디어 등을 배울 수 있었다 #include using namespace std; bool solution(vector phone_book) { // 1. 정렬 후, 뒤의 숫자에서 앞의 숫자 find 하기 // 오름차순 정렬 후, 뒤의 숫자가 앞의 숫자를 포함하는지 확인. .. 2022. 6. 21.
a 에 b가 확인 혹은 찾는 문제는 - 해시 hash - 문제 a에 b가 있는지, 포함되어 있는지, 누가 무엇을 한 사람인지 등등의 문제는 a에서 b를 찾아 세야 되는 문제이고 해쉬 맵을 사용한 문제이다 unordered_map 과 map을 사용해서 풀자 key에는 찾을값을 넣고 value에는 숫자로 초기화 하고 카운트를 하고 빼는 것으로 있는지 없는지 확인가능하다 pair로 key와 value를 묶어서 map에 입력하거나 map[ key로 넣을 값 or배열, 상수값(상수로 map 전체 초기화) or 배열] 등을 통해 해쉬맵을 만들 수 있다 해시 맵을 만들었으면 그 해당key 일때 value를 조작하여 value를 가지는 "개수"를 찾거나 ( value로 키는 못구한다) a와 b의 겹치는 부분이 있는지를 찾기 위해서 부분의 문자열을 뽑는 substr 등으로 뽑아낸 .. 2022. 6. 21.
[프로그래머스 1 / c++] 완주하지 못한 선수 해쉬 문제로 유명한 문제이다 참가자와 완주자 명단을 비교하여 완주하지 못한 선수 이름을 찾는 문제이다 쉽게 이름 별로 인원 수를 카운트 하기위해서 unordered_map 을 사용하여 map을 만들고, 범위지정 for 문으로 참가자 명단을 돌며 map에 이름이 없으면 이름을 넣고 1로 초기화 해주기 위해 맵을 돌며 이름을 find 하고 이름이 없으면 반복자가 end()위치와 같으므로 조건을 지정 후 map(이름, 1) 해준다 for문 수행 중 맵에 이름이 있다면 그 이름의 벨류를 1 올려주어 중복을 알 수 있다(하지만 이 문제는 안쓰인다) 다시 범위지정으로 완주자를 돌며 완주자 이름당 벨류를 1씩 빼준다 for문으로 맵에서 혹은 참가자에서(둘 다 이름 목록이 같으므로 둘 중 하나를 골라 돌자) 이름을 다.. 2022. 6. 19.
백준 9375/c++ )) 패션왕 신해빈 조합을 사용하여 입을 수 있는 의상의 경우의 수를 구하는 문제이다 의상 하나를 입력 시 의상의 이름 + " " + 의상의 종류 로 입력이 되기 때문에 공백을 전 후로 입력을 두번 받는셈이다 입력은 두개지만 의상의 이름은 필요없으므로 의상의 종류만으로 경우의 수에 고려한다 그 의상을 착용하지 않은 경우도 그 의상의 종류 중 하나로 더하여 계산한다 map을 통해 의상의 종류를 key값으로, 종류별 개수를 value값으로 저장하고 종류별 착용가능 개수를 모두 곱해서 (가지고 있는 종류+1미착용) 경우의 수를 구한다 그 중 모든 종류를 미착용한 알몸상태는 제외하니 -1 을 하여 최종 경우의 수를 구한다 그것을 테스트 케이스만큼 반복하는 문제이다 주의사항 map을 대입시 auto 자료형을 사용해야 된다 종류개수에.. 2022. 6. 15.