https://school.programmers.co.kr/learn/courses/30/lessons/12918?language=javascript#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
C++ 풀이 :
#include <string>
#include <vector>
#include <iostream>
using namespace std;
bool solution(string s) {
bool answer = true;
int Size = s.size();
// 48 ~ 57
if(Size == 4 || Size == 6)
{
for(int i = 0; i < Size; i++)
{
int Num = static_cast<int>(s.c_str()[i]);
if(48 > Num || Num > 57)
{
answer = false;
return answer;
}
}
}
else
{
answer = false;
}
return answer;
}
아스키코드를 이용하여 크고작음을 비교하여 풀었다.
JS 풀이 :
일단 오답 풀이 :
function solution(s) {
let answer = false;
for(let i = 0; i < s.length; i++){
if(s[i] === " "){
return answer;
}
}
if(s.length !== 4 && s.length !== 6){
return answer;
}
// s 의 앞문자열이 0일때가 문제여서 sort함
const str = s.split("").sort((a,b) => b - a).join("");
const strA = str;
const strB = parseInt(strA) + "";
if(strA === strB){
answer = true;
}
return answer;
}
코드 해설 :
- 문자열을 쪼개서 배열로 만들어 큰숫자부터 나오도록 정렬하였다, => 이유는 작은숫자부터 정렬하면 0001 과 같은것들을 parseInt하면 1로나오기 때문.
- 이후에 그렇게 정렬한 문자열 원본과, 그 문자열을 parseInt하고 다시 문자열로 바꾼것이 같다면 true가 나오는 방식으로 구현했다.
- 여기서 공백이 나올때 예외사항이 발생하는데 그것은 위쪽 if 문에서 공백이 나오면 return 하도록 걸러주었다.
- 그럼에도 예외 케이스가 있었다. 0000 000000을 걸러내지 못해서 실패한 코드가 되었다.
function solution(s) {
let answer = false;
if(s.length !== 4 && s.length !== 6){
return answer;
}
for (let i = 0; i < s.length; i++) {
if (isNaN(s[i]) || s[i] === ' ') {
return answer;
}
}
answer = true;
return answer;
}
- isNaN() 함수는 문자가 숫자가 아닌 경우를 확인합니다. 숫자가 아닌 문자가 발견되면 false를 반환하는 함수입니다.
- 위 함수를 이용하면 쉽게 해결 가능하다.
'코드카타 > 코딩테스트' 카테고리의 다른 글
크기가 작은 부분문자열 (0) | 2024.08.25 |
---|---|
이상한 문자 만들기 (0) | 2024.08.25 |
수박x22222 (0) | 2024.08.20 |
가운데 글자 가져오기 (0) | 2024.08.20 |
제일 작은 수 제거하기 (0) | 2024.08.20 |