[백준] 2588번 곱샘 출력

권태형·2023년 11월 22일

알고리즘

목록 보기
5/33

일단 이번 문제를 쉽게 보고 그냥 생각대로 적으니 아래와 같이 작성되었다.

class Program {
    static void Main(string[] args){
        string firstLine = Console.ReadLine();
        string secondLine = Console.ReadLine();
        
        char[] secondChars = secondLine.ToCharArray();

        int firstNum = int.Parse(firstLine);
        int[] secondNums = new int[secondChars.Length];

        for(int i=0; i< secondChars.Length; i++){
            secondNums[i] = int.Parse(secondChars[i].ToString());
        }
       
        int result1 = firstNum * secondNums[2];
        int result2 = firstNum * secondNums[1];
        int result3 = firstNum * secondNums[0];
        
        Console.WriteLine(result1);
        Console.WriteLine(result2);
        Console.WriteLine(result3);
        Console.WriteLine(result1 + result2*10 + result3*100);   
    	}
}

많은 곳에서 컴파일 에러가 발생했다.

Console.ReadLine()으로 읽을때 각 변수들이 null이 될 수도 있기 때문에 컴파일 에러가 발생했다.
이전까지 거의 똑같은 과정으로 문제를 풀어왔는데 갑자기 여기서만 null에러라니? 이해가 가지 않았다.
어쨋는 문제를 해결하기 위해 "?"를 추가하고 조건문을 더해서 코드를 늘어뜨렸더니 통과는 되었다.

class Program {
    static void Main(string[] args){
        string? firstLine = Console.ReadLine();
        string? secondLine = Console.ReadLine();
        
        if(firstLine != null && secondLine != null){
        char[] secondChars = secondLine.ToCharArray();

        int firstNum = int.Parse(firstLine);
        int[] secondNums = new int[secondChars.Length];

        for(int i=0; i< secondChars.Length; i++){
            secondNums[i] = int.Parse(secondChars[i].ToString());
        }
       
        int result1 = firstNum * secondNums[2];
        int result2 = firstNum * secondNums[1];
        int result3 = firstNum * secondNums[0];
        
        Console.WriteLine(result1);
        Console.WriteLine(result2);
        Console.WriteLine(result3);
        Console.WriteLine(result1 + result2*10 + result3*100);
        }      
    }
}

절대 이게 맞는게 아닌거같은데.. 어쨋든 통과했으니 상관없겠지 싶었지만, 다른사람들 코드를 이것저것 찾아보았다.

라무스님 블로그 포스팅의 이 코드는 아래와같았는데 따로 null체크를 하지 않았는데 통과 되었다.

using System;

namespace B3_02588번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            string b = Console.ReadLine();

            Console.WriteLine(a * int.Parse(b[2].ToString()));
            Console.WriteLine(a * int.Parse(b[1].ToString()));
            Console.WriteLine(a * int.Parse(b[0].ToString()));
            Console.WriteLine(a * int.Parse(b));
        }
    }
}

으잉? 왜? 다시 원래코드로 돌아와서 다시 돌려보니 또 맞았다고 한다. 이해할 수 없는 백준의 세계였다.

숏코드에서 또 다른 코드를 봤을 때는 조금 충격이었다. 따로 전체 클래스나, Main함수를 작성하지 않았는데도 정상동작하였고, 코드 또한 훨씬 짧고 간결했다..

int a = int.Parse(Console.ReadLine());
string b = Console.ReadLine();
for (int i = 2; i >= 0; i--) Console.WriteLine(a * int.Parse(b[i].ToString()));
Console.WriteLine(a * int.Parse(b));

왜 난 이런생각은 못햇을까 for문을 좀 짧게 한줄로 적은건 그렇다 치지만, 이렇게 보니 너무 쉬운문제인데 나만 어렵게 푼것 같은 느낌이다.

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글