닷넷 버전이 낮음
int numlen = (int)MathF.Log2(num);
닷넷 버전이 낮아서 MathF.Log2를 사용할 수가 없다. 그래서 while문으로 다시 만들었다.
using System;
public class Solution {
public int[] solution(string s) {
int[] answer = new int[2];
int zeroCnt = 0;
int ConCnt = 0;
while(s!="1")
{
string news = s;
if(s.Contains('0'))
news = s.Replace("0","");
zeroCnt += s.Length - news.Length;
int num = news.Length;
int numlen = 0;
while (num != 0)
{
num = num / 2;
numlen++;
}
char[] binary = new char[numlen+1];
for (int i = 0; i <= numlen; i++)
{
int temp = (int)(num / MathF.Pow(2, numlen - i));
binary[i] = (char)(temp+48);
num -= (int)MathF.Pow(2, numlen - i);
}
s=string.Concat(binary);
ConCnt++;
}
answer[0] = ConCnt;
answer[1] = zeroCnt;
return answer;
}
} 시간초과
이번엔 시간초과가 떴다. 왜 그런가 봤더니 num이 이진법으로 변환할 때 나누어지고 있어서 문자로 변환할 때 이상한 값이 들어가서 while이 끝나지 않았던 것이다.
그래서 이번엔 나누기용 변수를 하나 더 선언하고 진행했다.
int num = news.Length;
int ToDivide = num;
int numlen = 0;
while (ToDivide != 0)
{
ToDivide /= 2;
numlen++;
}
char[] binary = new char[numlen];
for (int i = 0; i < numlen; i++)
{
int temp = (int)(num / MathF.Pow(2, numlen - i-1));
binary[i] = (char)(temp+48);
num = num-(int)MathF.Pow(2, numlen - i-1);
}
s=string.Concat(binary);
ConCnt++;
이번 코드의 문제점은, 2진법으로 변환 했을 때 Temp가 0이 나올때는 num에서 빼지 않는데, 그 예외처리를 안하고 진행했다. 이 부분까지 예외처리를 하면 말끔해진다.
using System;
public class Solution {
public int[] solution(string s) {
int[] answer = new int[2];
int zeroCnt = 0;
int ConCnt = 0;
while(s!="1")
{
string news = s;
if(s.Contains('0'))
news = s.Replace("0","");
zeroCnt += s.Length - news.Length;
int num = news.Length;
int ToDivide = num;
int numlen = 0;
while (ToDivide != 0)
{
ToDivide /= 2;
numlen++;
}
char[] binary = new char[numlen];
for (int i = 0; i < numlen; i++)
{
int temp = (int)(num / MathF.Pow(2, numlen - i-1));
if (temp ==1)
num = num-(int)MathF.Pow(2, numlen - i-1);
binary[i] = (char)(temp+48);
}
s=string.Concat(binary);
ConCnt++;
}
answer[0] = ConCnt;
answer[1] = zeroCnt;
return answer;
}
}
- 하나의 동작에 여러가지 상황이 부여 될 수가 있다.
함수에 변수를 여러개 적용할 수 있게 해주는 게 Delegate기본 구조
delegate 반환형 델리게이트이름(매개변수);
기본적으로는 함수와 구성이 유사. 앞에 delegate만 붙여주면됨.
제거할 때는 -=변수명 해서 제거하면 됨.
그냥 사용해도 될 것 같지만 굳이 귀찮은 일을 한다면 이유는 한 가지 - 확장성 때문
팝업 실제로 만들어보기 - 주말에 영상 한번 더보자.
버튼에는 온클릭이라는 속성이있는데 뒤에 .AddListener라고 넣으면 함수를 매개변수로 넣어서 연결할수있음.
버튼을 눌렀을 때 연결된 함수가 실행됨
오늘은 뭐가 안풀린다. 만드는 것도 뜻대로 안되고, 튕겼더니 파일 꼬여서 다 다시 해야된다.
안될 때는 일단 손 떼고 새로운 마음으로 시작하자.