내일배움캠프 28일차 TIL
오늘 학습한 내용
[알고리즘]
두 정수 사이의 합
반복문을 이용한 문제를 풀 때 최근에 배열의 길이를 이용해서 많이 풀어서 a,b 의 숫자의 차이만큼의 배열의 크기를 구해서 반복문을 돌리려고 했는데 오버플로우 익셉션이 발생했다. 반복문을 돌리는데 굳이 배열의 길이를 이용할 필요는 없으니 두 숫자의 차이를 조건문에 넣고 문제를 해결했다.
public long solution(int a, int b)
{
long answer = 0;
long caseA = a-b;
long caseB = b-a;
long sum = 0;
if(a>b)
{
for(long i =0 ; i < caseA + 1; i++ )
{
sum += a;
a = a-1;
answer = sum;
}
}
else if(b>a)
{
for(long i =0 ; i < caseB + 1; i++ )
{
sum += a;
a= a+1;
answer = sum;
}
}
else
{
answer = a;
}
return answer;
}
다른 사람의 풀이
public class Solution
{
public long solution(int a, int b)
{
long answer = 0;
return ((long)(Math.Abs(a - b) + 1) * (a + b)) / 2; // 형변환
}
}
오늘의 회고
오늘은 팀 프로젝트 발표회가 있었다. 우리 조가 받은 피드백은 다음과 같았다.
1. 오브젝트 생성하는 코드를 인보크로 한 점이 아쉽다. 인보크 리피팅은 사용이 편리한 대신에 우리가 원하는대로 조절하기가 힘들다. 업데이트나 코루틴을 사용하면 더 좋을 것 같다.
2. 동일한 코드를 메서드로 만들면 훨씬 코드가 간결해진다. 컬러값 리스트나 딕셔너리를 만들어서 참조로 쓰면 함축이 가능하다.
3. UI출력코드와 일반적인 데이터 코드를 뭉쳐놓으면 나중에 수정처리가 어렵다. 데이터 처리 부분을 따로 만들고 UI최신화 코드를 만드는게 좋다. 게임매니저에서 너무 많은 코드를 작성하면 여러 사람이 작업할 때 힘들어서 메서드를 따로 구현하는게 좋다.
4. 내가 필요한 데이터는 어웨이크나 스타트에서 캐싱해놔라. 에러가 발생하면 치명적일 수 있고 코드를 작성한 사람이 게을러 보일 수 있다. Awake()에서 _controller = GetComponent<CharacterController>(); 이런 식으로 캐싱하고 사용하자.
5. 스크립트를 작성할 때 변수나 enum을 사용하는 것이 좋다. 다른 사람이 코드를 살펴볼 때 해당 인덱싱이 어떤 부분에 해당되는지 파악하기 어렵다.(0 - startScene 1 - easyStage... 이런 식으로)
6. 태그를 많이 사용하는 것은 성능적으로 좋지 않다. 대신 레이어를 사용하자. 레이어는 큰 구분을 해주고 태그는 그 안에서 개별적인 별명을 나타낸다고 이해하자. 만약 태그를 사용해야 한다면 == 보다는 .Equals사용이 좋다.
이후에는 팀원들에게 코드를 작성하는 팁에 대해 물어봤다.
[A팀원]
간단하게 알고리즘 순서같은거 부터 생각 진짜 간단한 변수 이런것만 작성놓고 나머지 구글링 조건문 틀만 구성을 해 놓는다.
[B팀원]
어디서 본 내용인 것 같으면 검색한다.
재활용을 잘 하면 좋다.
[C팀원]
이전 과제에서 활용했던 것을
구조를 활용해서 붙인다거나 한다.
해야 할 일
- 1. 유니티 게임 개발 숙련 강의 듣기