Programmers

Programmers 문제 풀이 37

백단비 2023. 8. 21. 23:54

문제 설명 : 컨트롤 제트

숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다.

문자열에 있는 숫자를 차례대로 더하려고 합니다. 

이때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 

숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 구한 값을 return 하도록 하는 함수???

 

제한 사항

  • 1 ≤ s의 길이 ≤ 200
  • -1,000 < s의 원소 중 숫자 < 1,000
  • s는 숫자, "Z", 공백으로 이루어져 있습니다.
  • s에 있는 숫자와 "Z"는 서로 공백으로 구분됩니다.
  • 연속된 공백은 주어지지 않습니다.
  • 0을 제외하고는 0으로 시작하는 숫자는 없습니다.
  • s는 "Z"로 시작하지 않습니다.
  • s의 시작과 끝에는 공백이 없습니다.
  • "Z"가 연속해서 나오는 경우는 없습니다.

 

입출력 예

 

s result
"1 2 Z 3" 4
"10 20 30 40" 100
"10 Z 20 Z 1" 1
"10 Z 20 Z" 0
"-1 -2 -3 Z" -3

 

문제 풀이

 

공백을 구분자로 나눠서 배열을 만들어준 뒤

뒤에 Z가 있으면 전의 숫자를 빼주고, 아니면 그냥 더하는 식으로 문제를 해결했다.

function solution(s) {
  var answer = 0;
  let arr = s.split(' ')
  for(let i = 0; i < arr.length; i++) {
	if(arr[i] === 'Z') {
	  answer+= -Number(arr[i-1])
	} else {
	  answer+= Number(arr[i])
	}
  }
  return answer;
}

다른 사람의 문제풀이를 보니 스택으로 생각하고 풀면 된다고 하는데... 좀 더 공부해야 할 수 있을 것 같다. 열공하자..

 

 


 

 

문제 설명 : 공 던지기

공 던지기 게임을 하고 있다.

공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있다.

친구들의 번호가 들어있는 정수 배열 numbers와 정수 k가 주어질 때,

k 번째로 공을 던지는 사람의 번호는 무엇인지 return하도록 하는 solution 함수???

 

제한 사항

  • 2 < numbers의 길이 < 100
  • 0 < k < 1,000
  • numbers의 첫 번째와 마지막 번호는 실제로 바로 옆에 있습니다.
  • numbers는 1부터 시작하며 번호는 순서대로 올라갑니다.

 

입출력 예

 

numbers k result
[1, 2, 3, 4] 2 3
[1, 2, 3, 4, 5, 6] 5 3
[1, 2, 3] 3 2

 

문제 풀이

 

k번째로 던저진 곳이아니라 k번째로 던진 사람이기 때문에 k-1을 해주고, 한 사람씩 건너뛰니까 2를 곱해준 값을 

numbers의 길이로 나눈 나머지를 인덱스로 넣어서 구했다.

funtion solution(numbers, k) {
  var answer = 2 * (k-1)
  return numbers[answer%numbers.length]
}

 

 

https://programmers.co.kr 

 

프로그래머스

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

programmers.co.kr

 

320x100

'Programmers' 카테고리의 다른 글

Programmers 문제 풀이 39  (0) 2023.08.24
Programmers 문제 풀이 38  (0) 2023.08.22
Programmers 문제 풀이 36  (0) 2023.08.08
Programmers 문제 풀이 35  (0) 2023.08.06
Programmers 문제 풀이 34  (0) 2023.08.02