728x90

코딩테스트 17

백준 C++ 18870번 좌표 압축

백준 C++ 18870번 좌표 압축- 문제 정의문제수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.입력첫째 줄에 N이 주어진다.둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다. 출력첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다. 솔직하게 여기까지만 보고 개인적으로 이해는 못했습니다밑에 출력 예시와 다른 사람들이 남긴 질문들을 보고 이해를 할 수 있었습니다. 예제 입력 1 복사52 4 -..

프로그래머스 [PCCE 기출문제] 9번 지폐접기

프로그래머스 [PCCE 기출문제] 9번 지폐접기 - 문제 설명민수는 다양한 지폐를 수집하는 취미를 가지고 있습니다. 지폐마다 크기가 달라 지갑에 넣으려면 여러 번 접어서 넣어야 합니다. 예를 들어 지갑의 크기가 30 * 15이고 지폐의 크기가 26 * 17이라면 한번 반으로 접어 13 * 17 크기로 만든 뒤 90도 돌려서 지갑에 넣을 수 있습니다. 지폐를 접을 때는 다음과 같은 규칙을 지킵니다.지폐를 접을 때는 항상 길이가 긴 쪽을 반으로 접습니다.접기 전 길이가 홀수였다면 접은 후 소수점 이하는 버립니다.접힌 지폐를 그대로 또는 90도 돌려서 지갑에 넣을 수 있다면 그만 접습니다.지갑의 가로, 세로 크기를 담은 정수 리스트 wallet과 지폐의 가로, 세로 크기를 담은 정수 리스트 bill가 주어질 ..

프로그래머스 LV1 C++ 소수찾기 풀이

문제 설명 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 코드 풀이 이 문제는 다른 문제들과 다르게 시간복잡도에 주의해야했다. 처음에 이중 for문을 쓰면서 이거 안될거 같다 했는데 혹시나가 역시나 소수를 찾는 알고리즘은 꽤 많이 알려져 있고 인터넷검색에도 있기에 어렵진 않았다. 내가 참고한 사이트는 아래이다. [알고리즘] 소수(Prime Number) 구하기 - 에라토스테네스의 체 (Java) (tistory.com) [알고리즘] 소수(Prime Number) 구하기 - 에라토스테네스의 체 (Java) 소수 소수(prime number)는 정수론의 가장 중요한 연구..

프로그래머스 LV1 C++ 문자열 내 p와 y의 개수 풀이

문제 설명 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다. 코드 설명 먼저 p와 y의 개수를 받을 int형 변수 두개를 선언하고 0으로 초기화해 주었다.(p_val, y_val) bool answer = true; int p_val = 0, y_val = 0; string의 인덱스 안의 문자가 대문자라면 소문자로 바꿔주었고, 해당 문자가..

프로그래머스 LV1 C++ 문자열 내마음대로 정렬하기 풀이

문제 설명 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 코드 설명 난 algorithm에 포함된 함수 sort를 활용하여 간단하게 풀이 하였다. 먼저 num을 전역 변수로 선언해 주었다. using namespace std; int num; 입력받은 n을 num에 넣어 주고 sort를 실행하였다. 이번에는 사용자 함수를 사용하여 sort를 사용하였다. vector answer; num = n; sort(strings.begin(), strings.en..

프로그래머스 LV1 C++ 두 정수 사이의 합 풀이

문제 설명명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 코드 풀이 난 먼저 주어진 두수의 대소를 가지고 어떤수가 큰 수이고 작은 수 인지를 먼저 판별한 다음 (만약 같다면 a를 리턴하게 하였다.) if(a==b){ answer = a; return answer; }else if(a>b){ Max = a; Min = b; }else{ Max = b; Min = a; } for 문을 활용하여 작은 수부터 큰수까지 answer에 더하게 하였다. for (int i = Min; i b){ Max = a; Min = b; }else{ Max = ..

프로그래머스 C++ LV1 나누어 떨어지는 숫자 배열 풀이

문제 설명 array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요. 코드 풀이 내가 백준에서 프로그래머스를 처음 들어오면서 겪은 문제점이 있었다. vector solution(vector arr, int divisor) { 바로 이 첫번째 줄이었다. 본능적으로는 이게 메인인걸 알고 있었지만 cin이랑 cout을 쓰던 나한테는 꽤 당황스러운 일이었다. 답 출력도 return answer; 이렇게 친절하게 해줬으니까 몇문제를 풀어보고 난 후에야 저위 vector와 int가 입력을 받는 것이란 걸 알수 있었다. 난 그냥 받아준걸..

백준 C++ 10814번 나이 순 정렬 문제 풀이

백준 C++ 10814번 나이 순 정렬 문제 풀이 문제 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 풀이 bool compare(const pair &cus1, const pair &cus2){ if(cus1.first == cus2.first){ return false; } return cus1.first < cus2.first; } compare이라는 사용자 함수를 따로 정의하여 비교하는 코드를 짰다. 나이가 같을 경우에는 비교를 하지 않도록 나이가 다르다면 나이가 작은 사람이 먼저 오도록 코드를 구성하였다 만 나중에 이것이 필요하지 않았음을 깨닫게 ..

프로그래머스 1LV C++ 같은 숫자 싫어

프로그래머스 1LV C++ 같은 숫자 싫어 문제 정의 -0~9까지 숫자가 무작위로 나열됨 -연속된 같은 수는 하나로 정리 -입력된 순서대로 출력할 것 문제 풀이 입력받은 크기만큼 반복한다. 맨 처음에는 비교할 애가 없음으로 그냥 answer의 맨뒤에 추가한다. 이후부터는 넣어진 애랑 비교하며 같으면 넘어가고 다르면 answer의 맨뒤에 추가한다. num을 사용한 이유는 맨 뒤에 있는 숫자와 현재 arr의 숫자를 비교하기 위해서 이다. 다만 굳이 num을 선언하지 않고 answer.back() 을 사용하면 맨뒤의 숫자와 비교할 수 있기 때문에 굳이 num을 사용할 필요는 없다. #include #include using namespace std; vector solution(vector arr) { int..