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();
}
}
}
비트연산자를 사용할 수 있다면 쉬운문제
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 메서드를 사용하여 문자열 배열로 출력하도록 수정하였습니다.