오브젝트가 생성되고 파괴될 때 Instantiate/Destroy를 사용하게 되면 성능 소모와 프레임 저하가 발생할 수 있으므로
오브젝트 풀링 패턴 사용
queue 형 자료는 선입선출의 구조
(1) Enqueue : 큐 맨 뒤에 어떠한 요소를 추가
(2) Dequeue : 큐 맨 앞쪽의 요소를 삭제하고 삭제한 값 반환
Instantiate(objectl, Transform parent); -> 오브젝트에 부모오브젝트를 할당
Instantiate(Object original, Vector3 position, Quaternion rotation); -> 오브젝트의 위치를 할당
ex) Instantiate(pollingobj, this.transform) -> 오브젝트의 부모를 이 오브젝트로함
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ left ≤ right ≤ 1,000
-내 풀이-
using System;
public class Solution {
public int solution(int left, int right)
{
int answer = 0;
for(int i = left; i <= right; i++)
{
if(Math.Pow((int)Math.Sqrt(i), 2) != i )
answer += i;
else
answer -= i;
}
return answer;
}
}
처음에 문제를 보자마자 직접 약수의 개수를 구하는 방법도 있겠지만
제곱수의 약수의 갯수는 홀수라는 것을 이용해서 문제를 풀어야 겠다고 생각했는데
제곱근이 정수임을 판별하는 방법이 도무지 떠오르지 않았다.
고민을 하던 중 Math.Pow() 로 거듭제곱을 이용하는 방법이 떠올랐고 제곱근을 int형으로
짤라버리고 다시 제곱을한다면 제곱수가 자기 자신이 나오지 않는다는 것을 이용해서 문제를 풀이했다.
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
-내 코드-
public class Solution
{
public string solution(string s)
{
string answer = "";
string[] ward = s.Split(' ');
for(int i = 0; i < ward.Length; i++)
{
for(int j = 0; j < ward[i].Length; j++)
{
if(j % 2 == 0)
answer += char.ToUpper(ward[i][j]);
else
answer += char.ToLower(ward[i][j]);
}
if( i != ward.Length-1)
answer += " ";
}
return answer;
}
}
문제를 풀다가 다시 한번 되새길 수 있었던 중요한 사실인데 'ward[i][j]' 는 char형 값일 뿐이다
'ward[i][j] = 새로운 값' 처럼 직접 초기화를 해주어야 실제 ward[][] 값이 바뀌는 것인데 ToUpper(ward[i][j]) 를 해 놓고
왜 실제 ward[i][j] 안에 있는 값이 변하지 않는지에 대해서 고민하던 문제가 있었다. 마찬가지로 ToUpper(ward[i][j])도
ward[i][j]를 대문자로 바꾸어준 char형 값에 지나지 않는다
-다른 사람의 풀이-
public class Solution {
public string solution(string s) {
string answer = "";
int num = 0;
for(int i = 0; i < s.Length; i++)
{
answer += num % 2 == 0 ? s[i].ToString().ToUpper() : s[i].ToString().ToLower();
num = s[i] == ' '? 0 : num + 1;
}
return answer;
}
}
이건 다른 사람이 풀이 했던 방식인데 애초에 공백은 대문자로 바꾸어 주던 소문자로 바꾸어주던 상관없이
공백이기 때문에 Split으로 따로 나누어 주지 않았고 대, 소문자를 구분해줄 num변수를 새롭게 추가해서
한번의 반복문으로도 깔끔하게 풀이했다.