[프로그래머스] 0레벨 문제 여러개 (주로 문자열 관련)
치킨 쿠폰
https://school.programmers.co.kr/learn/courses/30/lessons/120884
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
int solution(int chicken)
{
int coupon = chicken; // 발급받은 쿠폰 수
int service = 0; // 받을 수 있는 서비스 치킨 수
while (coupon >= 10)
{
service += coupon / 10; // 쿠폰 10장마다 서비스 치킨 1마리 받을 수 있음
coupon = coupon / 10 + coupon % 10; // 쿠폰 발급
}
return service;
}
외계어 사전
https://school.programmers.co.kr/learn/courses/30/lessons/120869
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
int solution(vector<string> spell, vector<string> dic)
{
for (auto word : dic)
{
int checkCount = 0;
for (int i = 0; i < spell.size(); i++)
{
if (word.find(spell[i]) != string::npos) //일치하는 문자를 찾으면 몇개인지 검색한다.
{
int pos = 0;
int count = 0;
while (word.find(spell[i], pos) != std::string::npos)
{
count++;
pos += word.find(spell[i], pos) + spell[i].length(); // 찾은 후에 다음 탐색 시작 위치를 구하기 위해 찾은 '문자(열)의 위치 + 문자(열) 길이'를 구한다.
}
if (count > 1) //1개가 넘어가면 2리턴
return 2;
checkCount++;
}
}
if (checkCount == spell.size())
return 1;
}
return 2;
}
ㄴ 오류가 난다!
분명히 문제에 [spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.] 라고 되어있어서 1번 이상 알파벳을 사용한 경우까지 예외처리하여 제출했는데
6번 9번이 실패했다 ㅡ.ㅡ
질문하기를 보니 다들 문제가 이상하다며 한번씩만이아니라 한번 이상으로 해서 풀라고 해둔 것을 보고 예외처리를 없애고 다시 풀어보았다.
int solution(vector<string> spell, vector<string> dic)
{
for (auto word : dic)
{
int checkCount = 0;
for (int i = 0; i < spell.size(); i++)
{
if (word.find(spell[i]) != string::npos)
checkCount++;
}
if (checkCount == spell.size())
return 1;
}
return 2;
}
잘된다.. ㅋㅋ;;
아~~ 문제 잘 써두라고~~~!!
대문자와 소문자
https://school.programmers.co.kr/learn/courses/30/lessons/120893
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
모든 문자들은 아스키코드값으로 이루어져 있다.
숫자는 48 ~ 57까지 대문자는 65 ~ 90까지 소문자는 97 ~ 122번까지로 구성되어 있는데, 이를 이용해서 처리할 수 있긴 하지만 함수를 이용하는게 좋을 것 같아 알아보았다.
#include <cctype> //필요!
isupper, islower 함수
대문자, 소문자 구분해준다.
반환형은 인자로 들어온 문자가 대문자인 경우에는 0이 아닌 숫자를 반환합니다.
ㄴ C++에서 0은 false, 그 외 숫자는 true로 취급한다.
찾다보니 같이 알게되었는데,
isdigit, isupper, islower, isspace 이 있으며, 숫자인지 / 대문자인지 / 소문자인지 / 공백인지 판별해주는 유용한 함수라고 한다.
대/소문자 변환은 toupper, tolower 함수가 있다.
근데 char[] 형으로 처리해야하는 번거로움이 있다!!
그래서 아직 푸는중..!