Algorithm/프로그래머스

C#) [프로그래머스] 비밀지도

HSH12345 2023. 1. 29. 02:50

코딩테스트 연습 - [1차] 비밀지도 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace _230128_1
{
    class Program
    {
        static List<int> friendList = new List<int>();

        static void Main(string[] args)
        {
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

            int n = int.Parse(sr.ReadLine());
            int[] arr1 = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
            int[] arr2 = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);

            string[] strArr1 = new string[n];
            string[] strArr2 = new string[n];

            for(int i = 0; i < n; i++)
            {
                strArr1[i] = Convert.ToString(arr1[i], 2).PadLeft(n, '0'); //비트연산자로 스트링의 인덱스가 n개 미만일 경우 
                strArr2[i] = Convert.ToString(arr2[i], 2).PadLeft(n, '0'); //가장 왼쪽부터 인덱스가 n개가 될 떄 까지 0을 채워넣음
            }

            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < n; i++)
            {
                sb.Append("\"");
                for(int j = 0; j < n; j++)
                {
                    if (strArr1[i][j] == '1' || strArr2[i][j] == '1') sb.Append("#");
                    else sb.Append(" ");
                }

                sb.Append("\"");

                if(i != n - 1)
                {
                    sb.Append(", ");
                }
            }

            sw.WriteLine(sb);

            sr.Close();
            sw.Close();
        }
    }
}

예제 1
예제 2

비트연산자를 사용할 수 있다면 쉬운문제

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace _230128_1
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

            int n = int.Parse(sr.ReadLine());
            int[] arr1 = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
            int[] arr2 = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);

            string[] map = new string[n];

            for (int i = 0; i < n; i++)
            {
                map[i] = Convert.ToString(arr1[i] | arr2[i], toBase: 2).PadLeft(n, '0');                
            }

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < n; i++)
            {
                sb.Append("\"");
                for (int j = 0; j < n; j++)
                {
                    if (map[i].ToString()[j] == '1') sb.Append("#");
                    else sb.Append(" ");
                }

                sb.Append("\"");

                if (i != n - 1)
                {
                    sb.Append(", ");
                }
            }

            sw.WriteLine(sb);

            sr.Close();
            sw.Close();
        }
    }
}

 

비트연산자 OR(|)을 사용하여 배열형 연산을 줄여서 표현할 수 있었다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace _230128_1
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

            int n = int.Parse(sr.ReadLine());
            int[] arr1 = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
            int[] arr2 = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);

            string[] map = new string[n];

            for (int i = 0; i < n; i++)
            {
                map[i] = Convert.ToString(arr1[i] | arr2[i], toBase: 2).PadLeft(n, '0');
                map[i] = map[i].Replace("0", " ");
                map[i] = map[i].Replace("1", "#");
            }

            foreach(string str in map)
            {
                sw.WriteLine(str);
            }

            sr.Close();
            sw.Close();
        }
    }
}

Replace 메서드를 사용하여 문자열 배열로 출력하도록 수정하였습니다.