2023-09-12 TIL (수박 , 내적 ;Linq Zip, 팀 프로젝트 3일차)
code kata
<수박수박수박수박수박수?>
길이가 n이고, "수박수박수박수..."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요.
예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
<제한 조건>
n은 길이 10,000 이하인 자연수입니다.
<brainstorming>
문제 자체는 간단해 보이지만 풀이방법은 사람마다 굉장히 다를 것 같다.
우선 문자열을 반환하는 반복문을 작성해야 할 것 같고,
입력된 n값이 홀수이면 "수"로 끝나고 짝수라면 "박"으로 끝나는 것도 고려해 볼 만하다.
public class Solution {
public string solution(int n) {
int Length = n/2;
string answer = "";
for (int i = 0; i < Length; i++)
{
answer += "수박";
}
if(n%2 == 1)
{
answer += "수";
}
return answer;
}
}
<내적>
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다.
a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)
<제한 사항>
- a, b의 길이는 1 이상 1,000 이하입니다.
- a, b의 모든 수는 -1,000 이상 1,000 이하입니다.
<brainstorming>
이번 문제 또한 크게 어려운건 없었다. 마찬가지로 반복문을 사용하여
a와 b의 공통되는 인덱스 값을 곱해주고 더하면 끝이였다.
using System;
public class Solution {
public int solution(int[] a, int[] b) {
int answer = 0;
for(int i = 0; i < a.Length; i++)
{
answer += a[i] * b[i];
}
return answer;
}
}
<다른 사람의 풀이>
이번 문제는 인상깊었던 풀이가 있었다. 바로 Linq를 사용하는 방식이었는데,
using System;
using System.Linq;
public class Solution
{
public int solution(int[] a, int[] b)
{
return a.Zip(b, (t1, t2) => t1 * t2).Sum();
}
}
여기서 사용된 Zip 메서드는 'a'와 'b'의 요소를 요소별로 결합하는 것이다.
이 메서드는 배열'a' 와 'b'의 각 요소를 짝지어 곱한 후 합계를 반환한다.
결과적으로 내적에 대한 공식을 그대로 실행시켜 준다는 소리다.
Unity Team Project
1. StartScene 에서 버튼 클릭시 해당 UI 가 나오도록 설계
- 문제 : UI 컴포넌트 중 Button 을 사용하여 버튼기능이 탑재된 UI를 생성하는 것 까진 어렵지 않았지만, 해당 버튼을 클릭했을 때 원하는 상태로 넘어가도록 설계해야 함
- 시도 : '게임소개' 버튼을 눌렀을 때 메인메뉴에 존재하는 버튼 UI들은 사라지고 게임소개에 대한 UI 창이 뜨길 원해서 Panel UI 를 사용하려 했지만 Panel UI 를 사용하면 반투명하게 보여서 글자를 입력할 시 가독성이 굉장히 떨어짐
- 해결 : Image UI 를 사용하여 판넬을 대체하였고, 문구를 입력 할 수 있게 따로 Text UI 도 생성하여 판넬에 맞춰서 조정하였다. 또한 유튜브 영상을 찾아서 StartScene의 Button UI 들이 클릭 시 정상적으로 기능이 작동하게끔 완성
- 알게 된 것 :
InstBtn(게임 소개 버튼) 의 On Click() 에서 Instruction UI가 활성화 및 비활성화가 되도록 해당 사진처럼 구현하여
해당 UI가 나오도록 작업하였다. 또한 나가는 버튼인 X 버튼도 만들어서 붙여두었고,
해당 버튼 또한 SetActive 에서 관리할 수 있게 만들었다.
2. 개인 Stage 음악 리소스 추가
- 문제 : 배경음악이 없어서 굉장히 밋밋했기 때문에 해당 씬에 음악 리소스를 삽입하려고 함
- 시도 : 음악 리소스를 사용하신 다른 팀원 분의 씬을 참고하려고 했으나 보는 것 만으로는 이해가 어려워서 다시 유튜브에서 배경음악을 넣는 방법을 찾아봄
- 해결 : 사운드를 담당하는 SoundManager 라는 C# Script를 작성하고 해당 씬의 SoundManager 에 해당 스크립트를 컴포넌트로 추가하고
SoundManager 폴더 하위에 Audio Source를 만들어서 원하는 음악 리소스를 AudioClip 부분에 삽입해주면 된다.
음악이 작동하도록 하는 SoundMamager Script 는 다음과 같다.
- 알게 된 것 : 사운드를 담당하는 부분 또한 C# Script 가 필요하지만, 그렇게 어려운 로직도 아니었다. 그리고 생각보다 유튜브에 좋은 강의들이 많아서 자기주도적으로 문제를 해결하는데에 굉장히 많은 도움이 된다.
만약 이렇게 해서도 안될 때에, 팀원분이나 튜터님께 해당 해결방법을 시도해 보았으나 해결하지 못했다고 질문하는게 나을 것 같다.
3. Player Prefabs 이미지 변경
- 문제 : 여태껏 기본 Sprite로 구성된 Player Prefabs 를 사용하고 있었다면, 이제는 해당 부분에 이미지를 추가하여 현재 팀 프로젝트의 컨셉에 맞는 Player 로 보이도록 변경할 것이다.
- 시도 : Prefabs 에 존재하는 Player 를 변경해야 다른 팀원분들도 각자의 씬에서 존재하는 Player에 변경사항이 적용될 것이라 판단하여 Prefabs 의 Player 에 기존의 Sprites 를 제거하고 이미지 리소스를 적용시켰더니 움직임도 잘 동작했다.
- 해결 : Player Prefabs 자체를 수정하면 가져다쓰는 다른 팀원분들도 적용이 가능하여 해결
- 알게 된 것 : Prefabs 화 시킨다는 것의 유용함을 알게 됨