일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- 유니티
- 1월
- 골드메탈
- C/C++
- 2025년
- 코딩 테스트
- 개인 프로젝트 - 런앤건
- 2월
- 게임 엔진 공부
- c++
- 코딩 기초 트레이닝
- 2024년
- 단계별로 풀어보기
- todolist
- 2023년
- 다이나믹 프로그래밍
- 10월
- 7월
- 5월
- 백준
- 수학
- 유니티 심화과정
- 3월
- 입문
- 4월
- 자료 구조
- 2022년
- 개인 프로젝트
- 기초
- Today
- Total
기록 보관소
[프로그래머스] Lv.1 문제 PART 6(C++) 본문
프로그래머스 코딩 테스트 : Lv.1 문제(C++)
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
프로그래머스 Lv.1 문제 : 콜라츠 추측
https://school.programmers.co.kr/learn/courses/30/lessons/12943
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다.
위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요.
단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.
제한사항
- 입력된 수, num은 1 이상 8,000,000 미만인 정수입니다.
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
int solution(int num) {
long temp = num;
for (int i = 0; i < 500; i++) {
if (temp == 1)
return i;
temp = temp % 2 ? temp * 3 + 1 : temp / 2;
}
return -1;
}
결과
프로그래머스 Lv.1 문제 : 핸드폰 번호 가리기
https://school.programmers.co.kr/learn/courses/30/lessons/12948
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한사항
- phone_number는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
string solution(string phone_number) {
for (int i = 0; i < phone_number.size() - 4; i++)
phone_number[i] = '*';
return phone_number;
}
결과
프로그래머스 Lv.1 문제 : 가운데 글자 가져오기
https://school.programmers.co.kr/learn/courses/30/lessons/12903
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.
단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
제한사항
- s는 길이가 1 이상, 100이하인 스트링입니다.
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
string solution(string s) {
string answer = "";
if (!(s.size() % 2))
answer += s[s.size() / 2 - 1];
answer += s[s.size() / 2];
return answer;
}
// 다른 사람의 풀이 1 : 비트 연산과 substr을 사용하는 방법
#include <string>
using namespace std;
string solution(string s) {
return s.length()&1 ? s.substr(s.length()*0.5,1) : s.substr(s.length()*0.5-1,2);
}
// 다른 사람의 풀이 2 : substr로 간략하게 해결하는 방법
#include <string>
#include <vector>
using namespace std;
string solution(string s) {
int size = s.size();
string answer = s.substr((size - 1)/2, (size-1)%2 + 1);
return answer;
}
결과
여담
첫 번째 문제 '콜라츠 추측'은 int형 정수 num을 그대로 사용할 경우 테스트 케이스 3번에서 실행 결과 488이 출력되며 오류가 발생한다.
이는 문제 오류가 아니라, 주어진 숫자 626331이 콜라츠 추측을 반복하면서 int형 보다 더 큰 값이 되어 오버플로우가 발생해서 그런 것이라서 위에 작성한 코드처럼 long과 같은 큰 값을 쓰면 해결 가능하다.
처음에는 문제 오류인가 싶어서 조금 당황스러웠었다.
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.1 문제 PART 8(C++) (0) | 2024.05.13 |
---|---|
[프로그래머스] Lv.1 문제 PART 7(C++) (0) | 2024.05.10 |
[프로그래머스] Lv.1 문제 PART 5(C++) (0) | 2024.05.07 |
[프로그래머스] Lv.1 문제 PART 4(C++) (0) | 2024.05.06 |
[프로그래머스] Lv.1 문제 PART 3(C++) (0) | 2024.05.03 |