함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
입출력 예
n | return |
---|---|
118372 | 873211 |
오늘은 성공했다 !
using System;
public class Solution
{
public long solution(long n)
{
long answer = 0;
long k = (long)(Math.Log10(n) + 1);
long[] ary = new long[k];
long i = 0;
while (n != 0)
{
ary[i] = n % 10;
i++;
n = n / 10;
}
long num;
for(long j = 0; j < ary.Length; j++)
{
for (long h = j + 1; h < ary.Length; h++)
{
if (ary[h] < ary[j])
{
num = ary[j];
ary[j] = ary[h];
ary[h] = num;
}
}
}
long x = 1;
for (long j = 0; j < ary.Length; j++)
{
answer += ary[j] * x;
x = x * 10;
}
return answer;
}
}
배열에 할당된 값을 바꿔주는 코드를 작성하여 해결하였다. 역시 기본기를 더 다져야할 듯 싶다. . .
// BulletCtrl.cs
public class BulletCtrl : MonoBehaviour
{
public float speed = 5.0f;
public float lifeTime = 5.0f;
void Start()
{
// 시간이 지나면 오브젝트 삭제
Destroy(gameObject, lifeTime);
}
void Update()
{
// x값에 1을 더해준다. 업데이트 메서드에 넣어서 반복 실행
transform.Translate(Vector2.right.normalized * speed * Time.deltaTime);
}
}
// ShootingBullet.cs
private void CreateProjectile()
{
// 마우스 포인터의 좌표를 스크린 기준으로 값을 얻는다.
Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// 스크린 중앙을 기준으로 벡터값이 나오므로 객체의 벡터값을 빼줘서 기준을 객체로 만들어 준다.
Vector2 newAim = (direction - (Vector2)transform.position).normalized;
// 마우스 포인터까지의 방향 벡터를 얻는다.
float rotZ = Mathf.Atan2(newAim.y, newAim.x) * Mathf.Rad2Deg;
// 생성(프리펩의 불릿, 생성 지점, 로테이션 값에 마우스 포인터까지의 방향 벡터를 넣어준다.
Instantiate(_prefabBullet, _bulletSpawnPosition.position, Quaternion.AngleAxis(rotZ, Vector3.forward));
}
마우스 포지션으로 탄알을 쏘는 것은 그리 어렵지 않았지만 탄알의 벡터z값이 스크린의 중앙으로 고정이 되어서 캐릭터가 이동하면 문제가 발생했다. 여러 스크립트와 영상들을 보면서 이리저리 만져본 결과
벡터 - 벡터를 이용하여 해결하였다.
유니티 안에서의 오브젝트 위치는 벡터값으로 결정이 되고, 제일 중요한 값이었다. 구현에는 성공하였지만 사실 코드에 대한 이해도는 현저히 낮다. . . 주말에 시간을 내어 명확하게 코드 리뷰를 해서 흡수할 예정이다.