본문 바로가기

개발 노트/백준, 프로그래머스 풀이165

[프로그래머스 1 / c++] 완주하지 못한 선수 해쉬 문제로 유명한 문제이다 참가자와 완주자 명단을 비교하여 완주하지 못한 선수 이름을 찾는 문제이다 쉽게 이름 별로 인원 수를 카운트 하기위해서 unordered_map 을 사용하여 map을 만들고, 범위지정 for 문으로 참가자 명단을 돌며 map에 이름이 없으면 이름을 넣고 1로 초기화 해주기 위해 맵을 돌며 이름을 find 하고 이름이 없으면 반복자가 end()위치와 같으므로 조건을 지정 후 map(이름, 1) 해준다 for문 수행 중 맵에 이름이 있다면 그 이름의 벨류를 1 올려주어 중복을 알 수 있다(하지만 이 문제는 안쓰인다) 다시 범위지정으로 완주자를 돌며 완주자 이름당 벨류를 1씩 빼준다 for문으로 맵에서 혹은 참가자에서(둘 다 이름 목록이 같으므로 둘 중 하나를 골라 돌자) 이름을 다.. 2022. 6. 19.
문자열 내 맘대로 정렬하기 문제를 보자마자 sort 를 사용하여 정렬하면 되겠구나 했는데 벡터 안의 string 요소들이 담겨 있으니 아 2차원 배열로 풀면 되겠구나? 하고 생각했었고... cmp 함수를 제대로 못설계해서 시간을 날렸던 문제이다 커스텀 비교 함수의 사용법을 이해하게 된 문제이다 벡터 내 요소들인 string 들도 순서대로 비교가능하고, string내부의 인덱스 요소들도 순서를 비교가능하다 sort 의 비교함수는 인자를 2개를 가지고 비교하는데, 문제에서는 string 내 인덱스값이 같을때를 예외조건으로 달았으므로 두 string의 k번째 인덱스의 값이 같을 시 비교순서도 정해서 만들어주면 되는 문제였다 아래에 cmp함수의 a 2022. 6. 19.
[프로그래머스 1 / c++] 콜라츠 추측 확실히 프로그래머스 1단계는 백준 브론즈보다 쉬운것 같다. 물론 뒤쪽 연습문제 기준이다 앞쪽은 1단계라고 하지만 백준 실버나 골드정도 난이도가 보인다. 쉬운거부터 빠르게 1단계를 클리어하고 어려운 문제를 풀려고 한다. 오답노트에는 실패 케이스만 올리고 있다 그냥 조건만 열심히 구현한 코드다. 딱히 엄척난 로직이 있지 않다 하지만 num 가 int 형으로 주어지는데, 이를 그대로 사용하면 테스트 케이스에서 숫자가 커져서 런타임에러가 난다 이는 num 이 int 의 범위 이상의 수가 되었기 때문이다 그러니 그냥 num 을 long long 자료형으로 바꿔주면 쉽게 해결 된다 #include #include using namespace std; int solution(int num) { int answer =.. 2022. 6. 17.
[프로그래머스 1 / c++] 행렬의 덧셈 프로그래머스의 풀이에 익숙해지기 위해 프로그래머스 1단계부터 모두 풀기로 했다 어려운 것을 풀기보다는 기본 문법과 구현에 초점을 둔 1단계 레벨이다 하지만 개념이 부족해서 놓친 문제가 있어서 적어둔다 2차원 배열 gom[b][c] 를 만들려면 for문을 두번 돌되, 하나의 i에서 c의 개수만큼 연달아 push 하면 하나의 부분배열로 묶이므로, for 안에서 임시벡터에 push하여 1차원 부분 배열을 만들고, 저장한 임시 벡터에 저장된 부분배열을 최종 벡터에 push 하여 하나의 요소로 만들고, i번 만큼 반복하여 2차원 배열로 만들어준다 중요한 개념이다 헷갈리지 말고 반드시 이해하고 가자 #include using namespace std; vector solution(vector arr1, vector.. 2022. 6. 17.