-
언젠간 지각을 할 수도 있겠다 생각했지만.. 이게 오늘이 될줄 몰랐네요..
그래서 매니저님의 전화를 받고 일어나.. 코드카타에 늦어버렸습니다 ㅠㅠ
최대한 빠르게 정신을 차리고 코드카타를 했습니다.
x만큼 간격이 있는 n개의 숫자
public long[] solution(int x, int n) { int sum = 0; long[] answer = new long[n]; for(int i = 0; i < n; i++) { sum += x; answer[i] = sum; } return answer; }
이렇게 하면 될 줄 알았다고.. 해결했다 생각했는데 길이가 짧으면 가능한 코드였습니다.
그렇다면 문제가 무엇이였을까요?
왜 함수는 long을 반환하게 되어있을까요?
네.. 반환 타입 long에 주목을 했어야합니다.
public long[] solution(int x, int n) { long[] answer = new long[n]; for(int i = 0; i < n; i++) { answer[i] = (long)x*(i+1); } return answer; }
int와 long은 당연히 다릅니다. 그렇기 때문에 int를 long으로 바꿔줘야합니다.
자연수를 뒤집어 배열로 만들기
public int[] solution(long n) { int count = 0; long number = n; while (n != 0){ n = n/10; count ++; } int[] answer = new int[count]; for(int i = 0; i < count; i++){ answer[i] = (int)(number%10); number = number/10; } return answer; }
배열을 만들 때에는 배열의 크기를 지정해주는 것이 필요합니다.
그래서 count를 이용해서 숫자의 길이를 구해줬습니다.
count를 해줄 때 n /= 10을 하므로 원래 받은 값이 변화하게 됩니다. 이 값을 이용해서 %를 사용하게 되면 첫번째 숫자만 나오기 때문에 새로운 변수를 이용해서 원래의 값을 유지시켜주었습니다.
그렇게 생각대로 진행되었는데 몇 개의 케이스에서 에러가뜨더라구요.
이유는 answer[ i ] = (int)number%10에 있었습니다.
(int)(number%10)을 해줘야 된다고 하네요.
(int) number을 해주면 int%int라 될거라 생각했는데 그게 아니였나봅니다.
무슨 케이스에서 실패했는지 케이스를 보여주는 것이 아니기 때문에 궁금하네요.
다른 사람들 풀이 중에서
n.ToString().ToCharArray().Reverse()
를 이용한 풀이들이 많았습니다.
int를 string으로 바꾼다음 1글자씩 나눠서 배열로 만든 뒤, 순서를 뒤집는다는 의미입니다.
이렇게하면 while문을 이용한 길이 확인이 필요없습니다. Length를 이용해서 간단하게 확인할 수 있으니깐요.
대신 int를 string으로 바꿨기 때문에 string[]을 새로 만들어서 사용해줘야합니다.
정수 제곱근 판별
저는 while, for, if문을 참 좋아하는 것 같습니다.
이번에는 while을 이용해서 계산해주었습니다.
long을 반환하는 것이기 때문에 long i로 설정해주고 if문을 이용해서 i * i일 때와 아닐 때 return값의 변화를 주었습니다.
이렇게 할 경우 사실.. 작은 수는 괜찮지만 큰 수일 경우 시행횟수가 많아지면서 불필요한 시행이 생기게 됩니다.
하지만 그렇다고 시행횟수를 임의로 줄이게 되면 작은 수에 대한 값이 정확하게 나오지 않을 수 있기 때문에 그냥 큰수일지라도 실행하도록 설정해주었습니다.
해결은 했으니 다른 사람들의 풀이를 보고 무엇이 부족했는지 생각해보려 했습니다.
역시 함수를 사용하는 것이 참 부족했습니다.
Math.Sqrt();
숫자에 루트를 씌워주는 함수입니다.
여기서 나온 값의 곱이 입력된 값과 같다면 계산한 값을 return하고 아니라면 다른 값을 return하도록 하는 것입니다.
뿐만 아니라
함수를 이용해서 나온 값을 %1.0해주어서 나머지가 없다면 제곱근이고, 나머지가 있다면 제곱근이 아니므로 지정해준 값을 return해주면 됩니다. 이건 좀 새롭게 보이는 방법이였습니다.
구현을 할게 딱히 없어서 Read Me를 작성해보았습니다.
Read Me 작성을 할 때 쓸만한 것들을 정리해보려고 합니다.
1. 주석
<!-- 주석처리되는 부분 -->
주석을 해야할 부분이 여러줄일 경우
<!--
주석되는 부분
-->
2. 글자 크기 조절
글자 앞에 #를 입력하고 띄어쓰기를 꼭 추가해서 사용해주면 된다.
# 갯수가 많을 수록 글자의 크기는 작아진다.
#가 1~2개일 경우 글자 밑에 얇은 줄이 생긴다.
3. 글자 굵게 만들기
원하는 글자 앞, 뒤로 ** 또는 __를 입력해준다.
스페이스바는 없어도 된다.
4. 구분선 생성
큰 글자 밑에는 줄이 생기지만 위에는 줄이 없기 때문에 구분을 해주기 위해 선을 만들어주기 위해서
- 또는 *를 3개 이상 적어준다.
3개 이상 연속으로 적고 띄어쓰기를 해도 구분선이 생긴다.
5. 리스트 생성
앞에 숫자가 필요하다면 그대로 번호를 입력해주거나 같은 숫자를 입력해도 제대로 부여된다.
숫자가 필요 없다면 '- '를 앞에 적어준다. 단, ●이 앞에 생성되어서 수정이 불가하다.
6. Read Me 내 이동 링크
[표시될 내용](#이동할 곳 이름)
이동할 곳 이름은 #을 이용해서 제목으로 설정한 곳 가능
만약 제목에 띄어쓰기가 있다면 띄어쓰기 부분은 '-'를 넣어줘야한다.
7. 아이콘 또는 명찰 만들기

앞으로 자주 사용할 것 같은 아이콘


Read Me를 처음 작성해봐서 여러가지 해보고 싶어서 열심히 찾아봤습니다..
제목 앞에 이미지 넣는 것도 하고 싶은데 알맞는 이미지를 찾기 힘드네용..