본문 바로가기

problem solving

(93)
[프로그래머스]가장 큰 수 정렬한 후에 합치는 식으로 코드를 작성했다. 문제의 요구사항에 맞춰 정렬하기 위해 두 개의 값을 문자열로 바꾸고 A + B, B + A 이런식으로 순방향과 역방향으로 문자열을 합친다. 만들어진 문자열을 숫자형으로 바꾼 후 대소관계를 판별해서 반환해준다. (compare함수에서 문자열을 이용하지 않고 정렬을 시도했지만 1~6, 12번 케이스에서 틀린답을 구해서 실패했다) #include #include #include using namespace std; bool compare(int a, int b) { string A = to_string(a); string B = to_string(b); int left = stoi(A + B); int right = stoi(B + A); return left > ..
[프로그래머스]조이스틱 우선 A로 이루어진 name의 길이만큼의 문자열(str)을 만든다. 정답을 도출하기위해 그리디 기법을 사용했는데, 두 개의 반복문으로 우측과 좌측으로 각각 순회한다. 이 때 str과 name의 문자가 같을 때 이동횟수를 추가해준다. (str[0] == 'A' && name == 'A') 문자가 다르다면 반복문을 탈출해주고 pos변수에 탈출할 때까지의 이동횟수를 넣어주는데 왼쪽과 오른쪽중 적게 이동한 곳의 위치를 넣는다. (만약 str과 name이 모두 같은 문자라면 현재까지의 count값을 반환한다) 위치를 갱신하고 거기까지 이동한 횟수를 count에 더하고, 현 위치의 str과 name의 문자값의 가장 적은 차이(역순으로의 개수를 셀 때 크기가 더 작을 수 있다)만큼 count에 더해준다. #inclu..
[프로그래머스]컬러링북 주의!! // 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요. 코드에서 전역변수 사용하고 함수내에서 따로 초기화하지 않는다면 틀리게 된다. DFS를 사용했는데 check 배열에 다른 값을 부여해서 구간을 분리할 수 있도록 했다. DFS를 도는 동안 count를 증가시켜 한 구간의 순회가 끝난 후 max변수와 비교해 삽입할 수 있도록 했다. #include using namespace std; typedef struct { int y, x;} dif; dif dir[4] = { {1, 0}, {-1, 0}, {0, 1}, {0, -1} }; long long check[101][101] = { 0 };int count = 0;vector map; void DFS(int row, int ..
[프로그래머스]문자열 압축 1에서부터 s.size() / 2까지의 길이를 기준으로 가장 짧게 될 수 있는 압축 사이즈를 구했다. 정확히 단위마다 끊어져야 하므로 첫 for문에서 +sec(단위)씩 증가하도록 했다. 여기서 같은 쌍을 가질 수 있는 한계인 i < s.size() - (2 * sec) + 1을 기준으로 정해진 한계를 넘어가면 남아있는 문자열 길이를 전부 카운트에 넣고 반복문을 종료하고 한계를 넘어서지 않았다면 sec(단위) 만큼 카운트에 넣어준다. 이후 while문을 순회하는데 같은 단어가 반복되면 뛰어넘도록 함수를 구성해준다. while문을 진행하면서 같은 쌍의 개수를 세기 위해 check++을 한다. 1 ~ 9 일수도 10 ~ 99 일수도 100 ~ 500 일수도 있기 때문에 check로 구한 수를 while문이 끝..
[프로그래머스]프린터 편리한 탐색을 위한 인덱스를 지정해주기 위해 pair를 이용해 만든 벡터에 priorities 값을 복사한다. 1. 대기목록 가장 앞의 문서보다 가중치가 큰 값이 있으면 가장 뒤로 보내준다. 1번을 반복하다 가장 앞의 문서보다 가중치가 더 큰 값이 없을 때 가장 앞의 문서를 제거하고 count를 증가시킨다. 이 때 가장 앞의 문서의 인덱스가 location과 같다면 반복문을 종료시키고 값을 반환한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include #include #include using namespace std; int solution(vector prior..
[프로그래머스]주식가격 답의 벡터인 answer의 크기를 prices.size()로 할당해서 값의 분배를 편하게 할 수 있도록 한다. 큐를 사용해서 한 번의 순회로 끝낼 수 있도록 했다. 마지막으로 순회가 끝날 때까지 하락하지 않은 값들은 큐에 여전히 남아있으므로 이를 while문으로 따로 처리했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include #include #include #include using namespace std; vector solution(vector prices) { vector answer(prices.size()); queue mQ; for(int j ..
[프로그래머스]쇠막대기 '('가 나오면 막대기가 하나씩 쌓인다. '(' 다음에 ')'가 나오면 레이저가 발생하는데 이때 '('의 수 -1만큼(레이저 제외) 쇠막대기의 개수가 추가된다. ')' 가 연속적으로 나오면 쇠막대기의 끝을 의미하므로 +1을 해준다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include #include using namespace std; int solution(string arrangement) { int answer = 0; int count = 0; for (int i = 0; i 0 && arrangement[i - 1] == '(') { answer += count; } else { answer++; } } } ret..
[프로그래머스]기능개발 이전값이 완료되었을 때 현재값이 check배열이 true이면 카운트를 증가시켜주고 check를 true해준다. 한번 순회한 후에 현재 순차적으로 진행될 수 있도록 예외처리 해준 후 카운트가 0이 아닐 때 값을 푸쉬해준다. #include #include using namespace std; bool check[110] = { 0 }; vector solution(vector progresses, vector speeds) { vector answer; int cur = 0, count = 0; while (cur 0 && check[i - 1]))) { check[i] = true; count++; } } if(!check[cur]) { continue; } cur++; if(!count) { conti..