반응형 프로그래머스44 [Level_1 / C++ / 카카오] [1차] 비밀지도 다음 그림을 봤을 때 or 연산자가 떠오른다. 그림 옆에 이진수로도 힌트를 주는거 같다. 즉, '#' 문자는 '1' 을 나타내고 공백은 '0'을 나타낸다. 각 벡터의 정수값을 or 연산을 해주면 맨 밑의 그림과 같이 표현할 수 있다. 결과 그림과 같이 표현하기 위해서는 or연산을 통해 나온 결과값들은 각 행을 표현하는 정수값이며 그 정수값을 2로 계속 나눠주면서 나머지값이 1이라면 '#'를 붙여주고 아니라면 공백을 출력한다. #include #include #include using namespace std; vector solution(int n, vector arr1, vector arr2) { vector answer; for(int i=0; i 프로그래머스/Level_1 2022. 1. 23. [Level_1 / C++ / 카카오] 신고 결과 받기 자료구조 중복제거를 하기위해 쓰이는 자료구조이다. 많이 쓰이는 자료구조는 아니지만 문제에서 모든값의 중복을 없애고 오름차순으로 정렬하라는 문제가 나온다면 사용할 수 있다. 헤더로 set을 갖고 s baebalja.tistory.com 공백으로 문자열 자르기 문자열이 공백이 주어진 상태로 주어진다면 공백을 기준으로 문자열을 자를 수 있다. 예) string s = "abc def gh" ; 해당 문자열을 "abc" , "def" , "gh" 로 자르는 거다. 해당 문법을 알아보자. #include #inclu.. baebalja.tistory.com s1>>s2; m[s2].insert(s1); ss.clear(); } for(auto it : m){ if(it.second.size()>=k){ for(a.. 프로그래머스/Level_1 2022. 1. 23. [Level_2 / C++ / 카카오] 프렌즈4블록 문자열 벡터가 만약 "TTTANT" "RRFACC" "RRRFCC" "TRRRAA" "TTMMMF" "TMMTTJ" 이런식으로 주어졌다고 가정하자. 난 이것을 오른쪽으로 90도 회전했다. 이런식으로 돌려서 위에서부터 차례대로 v[0]의 문자열 ~ v[5]의 문자열로 생각하는 것이다. (쉽게 생각할 수 있도록!) 벡터 v를 하나하나씩 살펴보는데 정사각형 2X2 라는 점을 고려해서, 현재 원소에서 오른쪽, 아래쪽, 오른쪽+아래쪽을 확인해야하기 때문에 반복문에서는 열과 행을 하나씩 빼준값 까지 돌아야한다. 각 벡터의 문자열들의 사이즈가 1보다 같거나 작으면 애초에 비교대상이 되지 않으니까 continue 해준다. 그리고 map이라는 이차원 맵을 생성하여 서로 같은 원소가 총 4개가 나오면 map의 해당 인덱스.. 프로그래머스/Level_2 2022. 1. 20. [Level_2 / C++ / 카카오] 수식 최대화 삭제 및 삽입 벡터의 원소를 삭제를 하면 이후 인덱스에 해당하는 값이 지운 인덱스 칸을 채울 수 있다. 또한 어떤 특정 인덱스에 특정값을 삽입 하면 기존에 있던 값들은 뒤에 위치하게 된다. 다음 문법을 확 baebalja.tistory.com 모든 경우의 수 정렬 벡터를 정렬할 때 정렬 될 수 있는 모든 경우의 수를 물어보는 문제가 있다. 이러한 경우 해당 함수를 사용한다. 즉, A B C 를 정렬하고 싶은데 모든 경우를 정렬하면, ABC ACB BAC BCA CAB CBA 순으로 정 baebalja.tistory.com 우선 연산자의 우선순위가 주어지는데 총 세가지 연산자가 있다. "*", "-", "+" 이 연산자를 p_cal 이라는 벡터에 넣고 정렬해준다. next_permutaion 함수를 적용하.. 프로그래머스/Level_2 2022. 1. 20. [Level_2 / C++ / 카카오] 튜플 먼저 이차원 벡터안에 각 원소들의 숫자의 개수들을 집어넣고 각 벡터의 사이즈만큼 sort 한 후 map 자료구조를 통해 없는 원소들을 추가해주는 식으로 진행했다. 로직은 쉬워서 문자열로 제공되는 저 숫자들을 어떻게 빼내야 할지가 관건인 문제인거 같기도하다. 내가 푼 방식은 substr 함수와 find 함수를 익힐겸 해봤는데 이 방식 말고 다른 방식을 쓰는것을 추천한다 예를 들어, 방식은 여러가지가 있겠지만 가장 간단한 방법은 문자열을 차례대로 살펴보면서 그냥 숫자만 보면된다. ',' , '{', '}' 이러한 문자를 만났을 때는 그냥 else로 다 처리하란말이다. string s= ""; 숫자야? 응 s += 숫자1 숫자야? 응 s += 숫자2 숫자야? 아니 s == "숫자1숫자2" 이 값을 정수형으로 .. 프로그래머스/Level_2 2022. 1. 19. [Level 3] 입국심사 (C++) 진짜 이 문제에 시간 엄청 많이 쏟아 부었다. 아무리봐도 이게 정답인데 계속 "6번 9번 테스트케이스"에서 오류가 났다. 너무 스트레스 받아서 시간 보니까 3시간이 지나있었다. 비쥬얼 스튜디오에서 모든 테스트 케이스 쳐보고 계산해보고 하던 것을 중단하고 남들이 짜놓은 코드를 확인하고 검사해봐도 오류를 발견하지 못했다. 이진탐색은 다 똑같은 로직이기 때문에 이게 문제는 아니였던 거 같다. 이진탐색을 한번이라도 풀어 본 사람은 제일 처음 변수를 start와 end를 가리키는 변수를 생성해야한다. 나는 해당 변수명을 l 과 h 로 보통 지정하는 편인데 각각 초기화를 1과 LLONG_MAX 로 지정하였다. 근데 이렇게 하면 안된다. h에는 모든 사람이 제일 긴 심사 기간을 가지는 심사관한테 다 갔을 때 걸리는 .. 프로그래머스/Level_3 2022. 1. 18. [Level_3] 네트워크 (C++) 위의 그림은 [[1,1,0],[1,1,0],[0,0,1]] 를 도형화 시켜놓은것이다. 즉, 이차원 벡터값을 받아와서 현재 노드를 가리키는 인덱스에서 다른 노드를 가리키는 인덱스의 배열값이 1인곳을 방문 처리를 해주면서 dfs 를 돌리면 된다. #include #include using namespace std; bool check[200]; int n1; void dfs (vector &v, int node_idx){ for(int i=0; i 프로그래머스/Level_3 2022. 1. 18. [Level 2] 가장 큰 수 (C++) 오름차순, 내림차순으로 정렬하자 sort() 함수는 algorithm 헤더에 포함되어 있다. 대부분 코딩테스트에서 웬만해선 처음부터 끝까지 정렬을 한 후 문제를 풀게끔 되어 있는 경우가 많다. 이럴때 sort() 함수가 매우 유용하다. 벡터, 문 baebalja.tistory.com 사용자 정의에 의한 정렬을 하여 이 문제를 풀면된다. 즉, cmp() 함수를 생성하여 sort()의 세번째 인자 값으로 넣으면, bool 함수의 반환 값에 의해서 정렬이 동작한다. number값을 to_string 함수를 통해서 문자열로 처리한 후 compare()함수에서 문자열 a와 b를 합치는데 이때 a+b를 연결한것과 b+a를 연결한 것중에 더 큰 값을 앞에다가 정렬 하겠다는 의미이다. 6과 10을 한번 보자 해당 값을.. 프로그래머스/Level_2 2022. 1. 17. [Level_2] 더 맵게 (C++) 자료구조 Priority_Queue는 Queue 의 한 종류인데 말 그대로 우선순위에 따라 정렬된 Queue라고 보면 도니다. 와 동일한 라이브러리에서 지원 해주며 특정 원소를 push 를 할 때 O(logN)만에 이루어진다. 해당 시간 baebalja.tistory.com 해당 문제는 priority_queue 를 알면 쉽게 풀 수 있다. 값을 삽입 할 때 오름차순으로 정렬 되어있는 min heap으로 생성해준다. 그렇게 한다면 최소값이 루트노드에 위치하게 되며 제일 작은 값을 우선적으로 pop을 해주기 때문에 해당 문제를 쉽게 풀 수 있다. #include #include #include using namespace std; int solution(vector scoville, int K) { int.. 프로그래머스/Level_2 2022. 1. 17. [Level_2] 멀쩡한 사각형 (C++) 해당 문제는 로직을 이해를 해야한다. 입출력에서 W = 8 이고 H = 12 로 주어진다고 가정하자. 해당 그림과 같이 4번 반복하는 것이 보인다. 수식화 해보면 W와 H의 최대공약수 만큼 반복된다. 8과 12의 최대공약수는 4이다. 해당 값 뿐만 아니라 다른 값들도 최대 공약수 만큼 반복된다는 것을 임의의 숫자로 구해보면 알 것이다. 반복되는 그림을 한번 살펴보자. 너비가 2이고 높이는 3이다. 이 값들은 W와 H을 최대공약수로 나눈 값이라는 것을 알 수 있다. 그리고 빈칸의 개수는 반복되는 그림의 "너비+높이-1" 인 것을 알 수 있다. 그렇기 때문에 W와 H가 주어진다. 해당 값의 최대공약수는 반복되는 그림의 개수를 뜻하며 각 그림에서의 빈칸의 사각형의 개수는 (너비+높이-1) 라는 것을 알 수 있.. 프로그래머스/Level_2 2022. 1. 17. 이전 1 2 3 4 5 다음 반응형