본문 바로가기

coding test4

[프로그래머스/level2] JadenCase 문자열 만들기 문제 풀이과정 문자열에 들어갈 수 있는 문자 종류는 대문자, 소문자, ③숫자, ④공백 총 4종류이다. 공백문자가 연속해서 나올 수 있다는 것을 유의하며 케이스를 분석하면, ① 단어 첫 글자가 소문자면 대문자로 바꾸기 ② 첫 글자가 아닌 대문자면 모두 소문자로 바꾸기 이외에는 숫자와 공백 포함 모두 그대로 answer에 넣어주면 된다. ①번, 현재 가리키고 있는 글자가 단어의 첫 글자임을 판별하려면 바로 앞 글자가 공백인지 확인하면 된다. i - 1번째 요소가 공백인지를 확인하면 되는데, i = 0일 때 에러가 나기 때문에 s[0]은 따로 판별해주었다. ②번은 이전 요소가 공백이 아님을 확인하고, 현재 요소가 대문자인지를 확인하면 소문자로 바꿔주면 된다. 공백과 대문자/소문자 확인은 라이브러리의 isspa.. 2024. 1. 22.
[프로그래머스/level2] 영어 끝말잇기 문제 풀이과정 원래는 vector만을 이용해서 풀었는데 map을 사용해서 key로 영단어들을 처리하는 게 더 효율적임을 깨닫고 한 번 코드를 엎었다. 풀이 코드 #include #include #include using namespace std; vector solution(int n, vector words) { map word; word[words[0]] = 1; for (int i = 1; i < words.size(); i++) { if (word[words[i]] || words[i - 1].back() != words[i].front()) return {(i % n) + 1, (i / n) + 1}; word[words[i]] = 1; } return {0, 0}; } 실행 결과 2024. 1. 17.
[프로그래머스/level2] 최댓값과 최솟값 문제 풀이과정 양수, 0, 음수 모두를 고려해서 최솟값과 최댓값을 찾아야 하는 문제이다. 고려해야 할 사항은 다음과 같다. 1. string으로 주어지는 문자열을 C++에서 어떻게 split할 것인가? 2. 최댓값/최소값을 어떻게 구별할 것인가? 3. 문자열과 숫자 간 변환을 어떻게 할 것인가? C++에서 공백을 기준으로 문자를 나누는 방법은 크게 substr()을 사용하는 방법과 stream을 사용하는 방법이 있다. 필자는 stream을 사용하였다. vector에서 최대/최솟값을 알아내는 방법은 max()와 min()함수를 사용하는 방법, sort()로 정렬해서 찾아내는 방법, max_element()와 min_element()를 사용하는 방법 등 매우 다양하다. sort()로 정렬할 때에는 정렬된 v.. 2024. 1. 17.
[programmers/level3] 야근 지수 문제 분석 야근 지수를 최소화하기 위해서는 각 요소 간 차이를 최소화해야 함. works 배열 안에 담겨 있는 요소들이 각각 작아지도록. 원래는 아래와 같은 방식으로 sort()를 이용해서 풀려고 했으나, 테스트 불통. #include #include #include #include using namespace std; long long solution(int n, vector works) { long long answer = 0; // 각 works 안에 담겨 있는 요소들이 최대한 모두 작아지도록 sort(works.rbegin(), works.rend()); for (int i = 0; i < works.size(); i++) cout 2024. 1. 12.