[6/12 TIL]알고리즘 풀이

haegnim·2023년 6월 12일
0

TIL

목록 보기
9/52
post-thumbnail

문자열 연습하기

프로그래머스 스쿨 - 문자열 내 p와 y의 개수

문제 설명

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

제한 사항

  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

풀이(1)

  1. 대문자로 통일
  • toUpperCase() 메서드는 문자열을 대문자로 변환한 값을 반환한다.
  • toLowerCase() 메서드는 문자열을 소문자로 변환한 값을 반환한다.
function solution(s) {
	let answer = true;
	// 1. 대문자로 통일
	s = s.toUpperCase();
	console.log(s);
}

return answer;
  1. for문을 통해서 문자열의 요소 하나하나씩을 비교 (p, y와 비교)

문자열 : 문자들의 배열 형식으로 저장
Hello, World! 라는 문자는 [H,e,l,l,o, ,W,o,r,l,d,!]라는 문자들이 순서대로 배열에 저장된 형태로 표현할 수 있다. 문자열 조작에 유용한 기능이나 함수 (문자열의 길이 계산, 문자열 결합, 부분 문자열 추출, 대소문자 변환, 문자열 검색)를 알면 효과적으로 다룰 수 있다.

s.length: 문자열 s의 길이 만큼 반복

s[ i ] === ‘P’ : s의 i번째가 P인지 비교

num++ : num을 증가시킴

//2-1. p, y와 비교

for (let i = 0; i < s.length; i++) {
    if (s[i] === 'P') {
        num++;
    }
    if (s[i] === 'Y') {
        num--;
    }
}
  1. 개수 체크(p와 y의 개수가 같은지 체크)
    num의 값이 0이면 true 아니면 false
if (num === 0) {
    answer = true;
} else {
    answer = false;
}
function solution(s) {
let answer = true;
// 1. 대문자로 통일
s = s.toUpperCase();
console.log(s);
// 2. for문을 통해서 문자열의 요소 하나하나씩을 비교

let num = 0;

//2-1. p, y와 비교
for (let i = 0; i < s.length; i++) {
    //여기에서 비교
    if (s[i] === 'P') {
        num++;
    }
    if (s[i] === 'Y') {
        num--;
    }
}
//3. 개수 체크(p와 y의 개수가 같은지 체크)
if (num === 0) {
    answer = true;
} else {
    answer = false;
}
console.log(s);
return answer;

풀이(2)

function numPY(s){
return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}

.split() : 문자열을 분할하는 메서드

string.split( separator, limit ) : separator에는 분할의 기준을 넣는다.

s.toUpperCase().split("P").length: 나누어진 배열의 길이를 p의 개수로 간주한다.

...length === ...length : p와 y의 개수를 비교해서 동일하면 true로 반환하고 아니면 false를 반환

풀이(3)

function numPY(s){
return s.match(/p/ig).length == s.match(/y/ig).length
}

.match() 함수는 특정 텍스트 안에 검색할 단어, 찾고싶은 단어가 있는 경우 해당 텍스트가 문구에 포함되어 있는지 확인할 수 있다.

s.match(/p/ig) : s에서 p또는 P와 일치하는 모든 부분을 찾아 배열로 반환

ig는 정규 표현식에서 사용되는 플래그(Flag). 정규 표현식에서 플래그는 패턴 검색 시의 동작을 제어하는 역할을 한다.

  • i 플래그가 있으면 대소문자를 무시하고 검색합니다.
  • g 플래그는 전역 검색을 수행한다. 해당 패턴과 일치하는 모든 부분을 찾는다. g 플래그가 없으면 일치하는 첫 번째 부분에서 검색이 멈춘다.
  • /p/ig 정규 표현식은 문자열에서 'p' 또는 'P'와 일치하는 모든 부분을 찾는다.



반복문, 조건문 연습하기

프로그래머스 스쿨 - 음양 더하기

문제 설명

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

제한 사항

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

풀이 단계

나는 absolutes를 먼저 양수와 음수로 만들고 나서 값을 더하거나 빼는 과정을 생각했는데
absolutes를 양수와 음수로 만들고나서 나온 값들을 더하지 못해서 해맸다.
캠프에서 제공해준 풀이는 양수면 더하고 음수면 빼는 식이다.

function solution(absolutes, signs) {
// return해야 하는 answer 생성
//
var answer = 0;

//2. 두 배열을 비교해 가면서 값을 더하거나 빼줄 것
//2-1. 두 배열은 크기가 같음
for (let i = 0; i < absolutes.length; i++) {
    // 부호(+, -)에 따른 처리
    if (signs[i] === true) {
        answer += absolutes[i];
    } else if (signs[i] === false) {
        answer -= absolutes[i];
    }
}
//출력
return answer;
  • 더 짧게도 쓸 수 있다.
function solution(absolutes, signs) {
let answer = 0;
for (let i = 0; i < absolutes.length; i++) {
signs[i] ? answer += absolutes[i] : answer -= absolutes[i]
}
return answer;
}

0개의 댓글