코딩 테스트 연습/Programmers

[프로그래머스] 문자열 다루기 기본

은돌1113 2023. 9. 6. 10:25

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.


제한사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
  • s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

입출력 예

s return
"a234" false
"1234" true

문제풀이

  • every() : 모든 배열에 아이템이 조건을 충족하면 true 반환, 아니면 false를 반환
  • isNaN() : 어떤 값이 NaN인 지 판별 > NaN이면 true 반환, 아니면 false를 반환
 

배열함수(forEach, map, filter, some, every, find, findIndex)

배열 함수 리스트 - forEach : 반환값이 없다, 단순 for문과 같이 작동한다. - map : 반환값을 배열에 담아 반환한다. - filter: 조건에 충족하는(true) 아이템만 배열에 담아 반환한다. - some: 조건에 충족

eundol1113.tistory.com

// 첫 번째 시도
function solution(s) {
  var answer = true;

  answer = (s.length === 4 || s.length === 6) && !isNaN(+s);
	// "0x16"일 때 영문이 들어가는 숫자가 숫자로 인식되는 경우가 있어서 해당 테스트에서 true가 반한됨
	// 참고 : https://school.programmers.co.kr/questions/49912

  return answer;
}

solution("a234");
solution("1234");
solution("0x16");

 

// 두 번째 시도
function solution(s) {
	// 아래 if문에서 조건에 맞지 않는 경우 false를 대입해주는 코드가 없기 때문에 변수 생성 및 초기화 시 false로 값을 초기화 해주었다.
  var answer = false;

  if (s.length === 4 || s.length === 6) {
		// "0x16"이 숫자로 인식되지 않도록, split()를 사용하여서 문자 배열을 만들고, 
		// 각 문자를 숫자로 변환했을 때(+item) NaN이 아니면(!isNaN()) true가 반환되도록 해주었고,
		// every를 사용하여 모든 반환값이 true일 때 결과적으로 true를 반환하도록 해주었다.			
    answer = s.split("").every((item) => !isNaN(+item));
  }

  return answer;
}

solution("a234");
solution("1234");
solution("0x16");
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr