STIKA

Unity 캠프 19일차 TIL < 알고리즘 > 본문

프로그래밍/Unity + C#

Unity 캠프 19일차 TIL < 알고리즘 >

STIKA 2024. 1. 18. 20:28

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시간 중 얼마나 몰입했는지

📕  더 나은 미래를 위해 내일 어떤 공부를 진행할 것인지