오늘은 40~42번까지 풀었다. 2일간 제출을 못했어서 오늘 한번에 제출을 했었다.
3진법 뒤집기
이문제는 내가 이해를 잘 못하겠어서 검색을 통해 공부를 하고 풀이를 제출하였다.
using System;
public class Solution {
public int solution(int n) {
int answer = 0;
while(n > 0){
answer *= 3;
answer += n % 3;
n /=3;
}
return answer;
}
}
whlie문으로 n이 0보다 크면 반복문을 계속 실행시켜준다. 내부에서는 answer에 3을곱하고 answer에 n을 3으로 나눈 나머지를 넣어준 다음 n을 3으로 나눠주는 동작을 하게된다.
41 이상한 문자 만들기
이문제는 대, 소문자를 만드는 방법만 알면 쉽게 풀이가 가능한 문제였다.
public class Solution {
public string solution(string s) {
string answer = "";
int num = 0;
for(int i = 0; i < s.Length; i++){
if(s[i] == ' '){
answer += s[i];
num = 0;
continue;
}
if(num % 2 == 0){
//대문자로 변경
answer += s[i].ToString().ToUpper();
num ++;
}
else{
//소문자로 변경
answer += s[i].ToString().ToLower();
num++;
}
}
return answer;
}
}
먼저 공백을 기준으로 num이 초기화 되어야 하기 때문에 s[i]==' '이면 0으로 초기화를 시켜준다. 그 다음 num을 2로 나눈값이 0이면 대문자로 변경하는 ToString().ToUpper()를 사용하고 0이 아닐경우 ToString().ToLower()를 사용해 소문자로 변경해 answer에 추가시켜주면 해결된다.
42 삼총사
이문제는 3중반복문을 통해 해결하였다.
using System;
public class Solution {
public int solution(int[] number) {
int answer = 0;
for(int i = 0; i < number.Length; i++)
{
for(int j = i+1; j < number.Length; j++)
{
for(int k = j+1; k < number.Length; k++)
{
if(number[i] + number[j] + number[k] == 0)
{
answer++;
}
}
}
}
return answer;
}
}
같은 숫자로 계산을 하면 안되기때문에 1번 2번 3번 원소를 각각 앞의 숫자보다 1큰 숫자로 설정하여 계속 반복문을 돌려 해당되는 조합이 있다면 answer++를 해주는 방법으로 해결하였다.
여러가지 이슈들이 전부 해결되어 일주일만에 제대로 작업을 시작하게되었다. inputsystem을 사용하여 플레이어의 이동과 점프를 구현하기위해 스파르타 강의를 먼저 보고 따라해봤는데 원하는 내용과 일치하는 내용이 없고 참고하여 제작하려고 해봤으나 제대로 되지않아 이과정을 포기하였다.
다음으로 여러가지 velog또는 유튜브를 참고하여 제작을 하기위해 노력하였다. 여러가지 방법을 시도하던중 현재 이동과 점프가 구현되긴하였다. 그러나 만족스럽게 움직이지않아 추가적인 작업을 지속할 예정이다. 먼저 플레이어가 낙하상태가 되었을때 중력을추가해 빠르게 떨어지게하고싶고 점프버퍼와 코요테시간을 추가해 만족스러운 경험이 될수 있도록 노력해볼예정이다.
적어도 이번주 주말까지 제작을 완료하고 다음주부터는 캐릭터 로직에 들어가야하니 최대한 빠르게 작업을 진행할예정이다.
오늘의 기술면접질문은
가비지 컬렉터에 대해 설명해주세요
이다.
가비지 컬렉터는 메모리 관리를 담당하는 시스템 또는 프로그램의 구성 요소이며, 메모리에서 더 이상 사용되지 않는 객체를 찾아 제거하여 메모리를 회수하는 역할을 수행한다.
그리고 어제 예비군때문에 하지못했던 기술면접을 진행했었다.
ref'와 'out'의 사용 시 차이는 무엇인가요?
답 :ref는 사용전 선언 및 초기화를 해줘야하지만 out은 메서드내부에서만 초기화를 진행한다면 사용하기전에 초기화를 하지않아도 사용가능하다.
여기에 추가로 어디에서 활용가능한지 추가로 설명하면 좋다는 피드백을 받았다.
추가 : ref는 기존변수를 메서드에서 수정하려할때 사용하는 경우가 많고
out은 메서드 내에서 생성되는 값을 반환 할 때 사용하는 경우가 많다.
struct와 class를 비교해서 설명해주세요
이 질문은 아예 다르게 찾아보고 답변해 다시 공부하고 정리해야 한다.
답 : Struct는 값 타입이고 Class는 참조 타입이다.
Struct는 값 그 자체를 가지고 있으며, 변수에 값이 할당될 때 복사되어 메모리에서 스택에 저장됩니다.
Class는 객체의 참조가 변수에 할당되며, 변수가 실제 객체가 저장된 메모리 주소를 가리키는 방식으로 메모리에서는 힙(Heap)에 저장됩니다.
그렇기에 Struct는 복사된 각 값이 서로 독립적이어서 변경되어도 다른 변수에 영향을 주지 않지만, Class는 같은 객체를 참조하는 여러 변수가 있을 시 하나를 변경하면 다른 변수도 변경됩니다.