Programmers

Programmers 문제 풀이 28

백단비 2023. 6. 24. 09:14

문제 설명 : 인덱스 바꾸기

문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때,

my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하는 solution 함수??

 

제한사항

  • 1 < my_string의 길이 < 100
  • 0 ≤ num1, num2 < my_string의 길이
  • my_string은 소문자로 이루어져 있다.
  • num1 ≠ num2

 

입출력예

 

my_string num1 num2 result
"hello" 1 2 "hlelo"
"I love you" 3 6 "I l veoyou"

 

문제 풀이

 

접근1) 새로운 문자열에 하나씩 더해주다가 num1의 인덱스가 나오면 num2의 값을 넣어주고,

num2의 인덱스가 나오면 num1의 값을 넣어줬다.

function solution(my_string, num1, num2) {
	var answer = '';
	for(let i = 0; i < my_string.length; i++) {
		if(i === num1) {
			answer+=my_string[num2]
		} else if ( i === num2) {
			answer+=my_string[num1]
		} else { 
		answer+=my_string[i]}
	}
	return answer;
}

 

접근 2) 구조 분해 할당을 이용하면 간단히 해결이 된다.

function solution(my_string, num1, num2) {
	let arr = my_string.split("");
	[arr[num1], arr[num2]] = [arr[num2], arr[num1]];
	return arr.join("");
}

 

 

 

구조 분해 할당

 

ko.javascript.info

 

 


 

 

문제 설명 : 영어가 싫어요

영어로 표기되어 있는 숫자를 수로 바꾸려고 한다.

문자열 numbers가 매개변수로 주어질 때,

numbers를 정수로 바꿔 return 하는 solution 함수???

 

제한사항

  • numbers는 소문자로만 구성되어 있다.
  • numbers는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있다.
  • 1 ≤ numbers의 길이 ≤ 50
  • "zero"는 numbers의 맨 앞에 올 수 없다.

 

입출력예

 

numbers result
"onetwothreefourfivesixseveneightnine" 123456789
"onefourzerosixseven" 14067

 

문제 풀이

 

접근 1) replaceAll로 다 바꿔준다. (마지막에 *1은 Number형식으로 바꿔주기 위함이다.)

function solution (numbers) {
	var answer = 0;
	let str = numbers
	str = str.replaceAll('zero','0')
	str = str.replaceAll('one','1')
	str = str.replaceAll('two','2')
	str = str.replaceAll('three','3')
	str = str.replaceAll('four','4')
	str = str.replaceAll('five','5')
	str = str.replaceAll('six','6')
	str = str.replaceAll('seven','7')
	str = str.replaceAll('eight','8')
	str = str.replaceAll('nine','9')
	return answer=str *1
}

 

접근 2) number = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] 배열을 만들어준 후 

이것들을 이용해서 split과 join을 반복해 준다.

function solution(numbers) {
	const number = ["zero","one","two","three", "four", "five", "six", "seven", "eight", "nine"]
	for(let i = 0 ; i<number.length; i++){
		numbers = numbers.split(number[i]).join(i)
	}
	return numbers *1
}

 

 


 

 

문제 설명 : 암호 해독

전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈다.

 - 암호화된 문자열 cipher를 주고받는다.

 - 그 문자열에서 code의 배수 번째 글자만 진짜 암호이다.

문자열 cipher와 정수 code가 매개변수로 주어질 때 

해독된 암호 문자열을 return 하는 solution 함수???

 

제한사항

  • 1 ≤ cipher의 길이 ≤ 1,000
  • 1 ≤ code ≤ cipher의 길이
  • cipher는 소문자와 공백으로만 구성되어 있다.
  • 공백도 하나의 문자로 취급한다.

 

입출력예

 

 

cipher code result
"dfjardstddetckdaccccdegk" 4 "attack"
"pfqallllabwaoclk" 2 "fallback"

 

문제 풀이

 

code의 배수 번째 글자만 진짜 암호이므로 index + 1을 code로 나눴을 때 나머지가 0 인 것들만 반환해 줬다.

(이때 index+1을 한 이유는 index는 0부터 시작하기 때문이다.)

function solution(cipher, code) {
	var answer = '';
	for(let i = 0 ; i<cipher.length; i++)
		if((i+1)%code === 0){
			answer+=cipher[i]
		}
	return answer;
}

 

 

https://programmers.co.kr 

 

프로그래머스

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

programmers.co.kr

 

320x100

'Programmers' 카테고리의 다른 글

Programmers 문제 풀이 30  (0) 2023.06.28
Programmers 문제 풀이 29  (0) 2023.06.27
Programmers 문제 풀이 27  (0) 2023.06.23
Programmers 문제 풀이 26  (0) 2023.06.22
Programmers 문제 풀이 25  (0) 2023.06.21