STIKA
Unity 캠프 19일차 TIL < 알고리즘 > 본문
24.01.18 Thu
❤️ TIL
Today I Learned
❤️하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)
📌 오늘의 계획
- 알고리즘 코드카타
- C# 4주차 강의 시작
✏️ 작업 내용
✔️ 알고리즘
숫자가 입력되면 그 숫자들의 자릿수를 전부 더한 값을 리턴하는 문제였는데
거짓말 안치고 이 문제 푸는데만 1시간 넘게 걸렸다.
맨처음 생각한 방식은
public static int solution(int n)
{
int answer = 0;
string str = n.ToString();
for (int i = 0; i < str.Length; i++)
{
answer += Convert.ToInt32(str[i]);
}
return answer;
}
였는데 자꾸 원하지 않는 값이 나온다
(int) 로 형변환을 해도 안되고
int.Parse(str[i])는 아예 ()가 밑줄이 생기면서 컴파일이 안되고
convert는 컴파일은 되는데 이상한 숫자가 뜬다
애초에 str[i]도 한참을 찾아서
str에서 인덱스 접근이 가능한걸 찾은건데
string을 char[]로도 바꿔봤다가
그걸 다시 int arr[]로도 넣어봤다가
안되서 화도 내고 굉장히 힘들었다
using System;
public class Solution {
public int solution(int n) {
int answer = 0;
while(n>0){
answer+=n%10;
n=n/10;
}
return answer;
}
}
결과적으로 이 방법으로 해결
이 방법도 솔직히 엄청 놀라웠다.
나머지끼리만 더하는데
123이 들어왔다고 했을때
123을 10으로 나누고 나머지는 3이니 그걸 더하고
n을 10으로 나누면 int라서 12만 남으니
그걸 또 나머지 계산을 하고
이게 n이 0보다 클때까지 반복한다니
이건 누가 생각했을까 진짜 엄청나다
그러고 나중에 다른 사람의 풀이를 보면서 왜 안됐는지 분석한 결과
다른 사람들의 코드에서 str[i].ToString()이 있는 것을 확인
??? 이미 string인데 왜 tostring을 또하지
컴파일러가 알려주는 내용을 확인하니
char 로 들어가 있음을 확인
char의 배열이 string인건 알았지만
string을 그냥 인덱스로 접근했을 뿐인데 char로 뜰꺼라고는 생각지도 못함
맨처음에 생각한 방식대로
public static int solution(int n)
{
int answer = 0;
string str = n.ToString();
for (int i = 0; i < str.Length; i++)
{
answer += int.Parse(str[i].ToString());
}
return answer;
}
으로 했을때는 성공하는 것을 확인.....
난 int Parse를 즐겨쓰는 사람인데 안되서 convert를 썼던건데...
저때 그냥 제대로 한번 확인해볼껄ㅜ
다시 확인하니 Parse()안에 못들어 가더라..
string 1 = int 1 이지만
char 1 은 int 1이 아니더라..
그걸로 생각이 든게 갑자기 아스키코드가 떠올랐다.
그래서 아스키코드표로 가서 바로 확인
public static int solution(int n)
{
int answer = 0;
string str = n.ToString();
for (int i = 0; i < str.Length; i++)
{
answer += Convert.ToInt32(str[i] - 48);
}
return answer;
}
아까 떴던 이상한 숫자가 1을 아스키코드로 써서 int로 바꿨을때 나오는 숫자더라ㅜㅜㅜㅜ
아마 이렇게 코드를 짰으면 되기는 됐었겠지....
SubString()
using System;
public class Solution {
public int solution(int n) {
int answer = 0;
string leng="";
for(int i = 0; i<n.ToString().Length; i++){
leng = n.ToString().Substring(i,1);
answer=answer+int.Parse(leng);
}
return answer;
}
}
다른사람의 풀이를 보다가 보게됐다.
Substring이라는게 있는데
문자열 자르기 라고 한다.
String.substring(start) start부터 끝까지 문자열 자르기 - start는 index
String.substring(start,end) start부터 end전까지 발췌
String str = "ABCDEFG";
str.substring(3);
결과값 = DEFG
str.substring(3, 6);
결과값 = DEF
📝 오늘의 마무리
세상 알고리즘 문제 풀다가 욕나올뻔..
오늘 조가 새로 바뀌었다.
Unity 강의가 새로 지급되었고
이걸 전부 완강 후에
다음주 화요일까지 개인과제 제출이 있다고 한다
C#도 다 못들었는데 가능할가
스탠다드 반으로 일단 신청은 했지만
내일 OT를 듣고 안되겠다 싶으면 베이직 반으로 옮겨달라해야지..
✏️ 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기
✏️ TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기
✏️ 꾸준히 기록을 남기는 습관 가지기
📕 오늘의 학습 키워드
📕 공부한 내용 본인의 언어로 정리하기
📕 오늘의 회고
📕 12시간 중 얼마나 몰입했는지
📕 더 나은 미래를 위해 내일 어떤 공부를 진행할 것인지
'프로그래밍 > Unity + C#' 카테고리의 다른 글
D+20일 TIL < 알고리즘 / Unity 사전 4주차 > (1) | 2024.01.22 |
---|---|
Unity 캠프 20일차 TIL < C# 문법 4 / 알고리즘 > (0) | 2024.01.19 |
Unity 캠프 18일차 TIL < 팀 프로젝트 종료 / 알고리즘 > (0) | 2024.01.17 |
Unity 캠프 17일차 TIL < 팀 프로젝트 마무리 및 제출 > (0) | 2024.01.16 |
Unity 캠프 16일차 TIL < 팀 프로젝트 1-3 > (0) | 2024.01.15 |