이 페이지는 코딩도장 데이터의 읽기 전용 정적 보관본입니다.

비밀 지도

출처 : http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/

2018년 카카오 신입 공채 1차 코딩 테스트 문제입니다.


네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.

  1. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 “공백”(“ “) 또는 “벽”(“#”) 두 종류로 이루어져 있다.
  2. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 “지도 1”과 “지도 2”라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.
  3. “지도 1”과 “지도 2”는 각각 정수 배열로 암호화되어 있다.
  4. 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.

네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.

입력 형식

입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.

  • 1 ≦ n ≦ 16
  • arr1, arr2는 길이 n인 정수 배열로 주어진다.
  • 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2^n - 1을 만족한다.

출력 형식

원래의 비밀지도를 해독하여 "#", 공백으로 구성된 문자열 배열로 출력하라.

입출력 예제

매개변수
n 5
arr1 [9, 20, 28, 18, 11]
arr2 [30, 1, 21, 17, 28]
출력 ["#####","# # #", "### #", "#  ##", "#####"]
매개변수
n 6
arr1 [46, 33, 33 ,22, 31, 50]
arr2 [27 ,56, 19, 14, 14, 10]
출력 ["######", "###  #", "##  ##", " #### ", " #####", "### # "]
입사문제 카카오

2017/10/07 16:03

pahkey

입출력 예제에 공백2개로 출력될 부분이 공백1개로 되어있는데 공백이 연속되면 공백 1개로 출력하는건가요? 문제엔 그러한 룰이 없어서요. - rk, 2017/10/08 14:12
네, 문제에 오류가 있네요. 원문도 마찬가지인걸로 보아 html 표기오류로 보입니다. 이곳에는 nbsp태그로 수정해 놓았습니다. - pahkey, 2017/10/08 16:50

80개의 풀이가 있습니다.

def secret(n, arr1, arr2):
    print(['{0:b}'.format((i | j)).zfill(n).replace('0', ' ').replace('1', '#') for i, j in zip(arr1, arr2)])


secret(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
secret(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10])

2017/10/12 10:02

songci

format((i | j))이부분에 대해서 설명좀 부탁드려도될까요 ? - Seohyun Choi, 2017/11/23 23:08
0 == False, 1 == True 0|0, 0|1, 1|0, 1|1 == 0, 1, 1, 1 세로로 긴 작대기(^^) 연산자는 or 연산자입니다. 둘 중 하나라도 참이면 참. - ­박철희, 2021/09/19 12:40
int main(void)
{
    int i=0,temp,temp2,for_bin,input_n;
    int *arr1, *arr2;
    scanf("%d", &input_n);  
    arr1 = new int[input_n];
    arr2 = new int[input_n];
    temp = pow(2, input_n);
    printf("arr1 입력\n");
    while(i!=input_n){          
        scanf("%d", &arr1[i]);  
        if (arr1[i] >= temp)
            printf("숫자가 조건보다 큽니다\n재입력하시오\n");
        else
            i++;
    }   i = 0;
    printf("arr2 입력\n");
    while (i != input_n) {
        scanf("%d", &arr2[i]);
        if (arr2[i] >= temp)
            printf("숫자가 조건보다 큽니다\n재입력하시오\n");
        else
            i++;
    }
    for (i = 0; i < input_n; i++) {
        temp = arr1[i] | arr2[i];
        for (for_bin = input_n; for_bin > 0; for_bin--) {
            temp2 = pow(2, for_bin - 1);
            if (temp / temp2)
                printf("#");
            else
                printf(" ");    
            temp= temp % temp2;
        }
        printf("\n");
    }
    delete arr1,arr2;
    return 0;
}

2017/10/16 00:42

hsson

def secret_map(n, arr1, arr2):
    for i in range(n):
        row = bin(arr1[i] | arr2[i])
        row = row[2:]
        row = row.zfill(n)
        row = row.replace('0', ' ')
        row = row.replace('1', '#')
        print(row)

secret_map(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])


2017/10/16 14:15

박범수

haskell

import Data.Bits ((.|.))

solution :: Int -> [Int] -> [Int] -> [String]
solution n arr1 arr2 = fmap display . toBits <$> zipWith (.|.) arr1 arr2
    where
        display True = '#'
        display False = ' '
        toBits = reverse . take n . fmap odd . iterate (`div` 2)

main = mapM_ putStrLn $ solution 5 [9,20,28,18,11] [30,1,21,17,28]

2017/12/10 06:42

sodii

Python 3.7

# 두 지도의 정수 값에 대해 OR 연산 => 연산된 (길이=size의) 이진문자열에 대해 문자 치환
def unveil_map(size, map1, map2):
    rst = [binary.zfill(n).replace("1", "#").replace("0", " ") for binary in
           (bin(map1[i] | map2[i])[2:] for i in range(size))]
    return rst


# 예제1
n = 5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]
print(unveil_map(n, arr1, arr2))

# 예제2
n = 6
arr1 = [46, 33, 33, 22, 31, 50]
arr2 = [27, 56, 19, 14, 14, 10]
print(unveil_map(n, arr1, arr2))

2019/03/18 21:01

mohenjo

Ruby

def decode_map(width, map1, map2)
  map1.zip(map2).map {|a,b| ("%0#{width}b" % (a|b)).gsub(/./,'0'=>' ','1'=>'#')}
end

Test

cases = [[5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]],
         [6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10]]]
decoded_maps = [["#####","# # #", "### #", "#  ##", "#####"],
                ["######", "###  #", "##  ##", " #### ", " #####", "### # "]]
expect( cases.map {|e| decode_map(*e)} ).to eq decoded_maps

2017/10/08 13:44

rk

# input #######################
n = 6
arr1 = [46, 33, 33 ,22, 31, 50]
arr2 = [27, 56, 19, 14, 14, 10]
###############################


def to_hash(num):
    hashs = ''
    for i in range(n):
        num, r = divmod(num, 2)
        hashs = ('#' if r else ' ') + hashs
    return hashs


print([to_hash(i | j) for i, j in zip(arr1, arr2)])

2017/10/10 15:33

songci

자바입니다. 많이 난잡하네여...원래 신입이면 이정도는 쉽게 풀어야 하는건가여 수정,보완 조언 부탁드려여

public class secret_map {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("한변의 길이  입력(1~16정수):");
        //한 변의 크기
        int n = sc.nextInt();
        int[] arr1 = new int[n];
        int[] arr2 = new int[n];
        Character[][] secret_map = new Character[n][n];
        Character[][] secret_map2 = new Character[n][n];
        System.out.println("배열1에 담을 값 :");
        for(int i=0;i<n;i++){
            arr1[i]=sc.nextInt();
        }
        System.out.println("배열2에 담을 값:");
        for(int i=0;i<n;i++){
            arr2[i]=sc.nextInt();
        }

        Character[][] list1=create_map(n,arr1);
        Character[][] list2=create_map(n,arr2);

        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(list1[i][j].equals('1') || list2[i][j].equals('1')){
                    secret_map[i][j]='1';
                }else{
                    secret_map[i][j]='0';
                }
            }
        }


        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                System.out.print(secret_map[i][j]);
            }
            System.out.println();
        }

        secret_map2=replace_map(secret_map);
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                System.out.print(secret_map2[i][j]);
            }
            System.out.println();
        }


    }

    static Character[][] create_map(int n,int[] arr1){

        Character[] tmplist1 = new Character[n];
        Character[][] list = new Character[n][n];
        String tmpstr="";

        for(int i=0;i<n;i++){
            if(Integer.toBinaryString(arr1[i]).length() != n){
                int cnt=1;
                while(true){
                    tmpstr=add_zero(cnt)+Integer.toBinaryString(arr1[i]);
                    cnt++;
                    if(tmpstr.length()==n) break;
                }
            }else{
                tmpstr=Integer.toBinaryString(arr1[i]);
            }
            for(int j=n-1;j>=0;j--){
                tmplist1[j] = tmpstr.charAt(j);
            }

            for(int k=0;k<n;k++){
                list[i][k]=tmplist1[k];
            }
        }

        return list;
    }
    static StringBuffer add_zero(int a){
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<a;i++){
            sb.append("0");
        }
        return sb;
    }
    static Character[][] replace_map(Character[][] list){
        for(int i=0;i<list.length;i++){
            for(int j=0;j<list.length;j++){
                if(list[i][j].equals('1')){
                    list[i][j]='#';
                }else{
                    list[i][j]=' ';
                }
            }
        }
        return list;
    }
}

2017/10/11 16:26

김문수

C++


vector<string> solution(int n, vector<int> arr1, vector<int> arr2)
{
    vector<string> ans(n);
    for (int i = 0; i < n; ++i)
    {
        int lineKey = arr1[i] | arr2[i];
        for (int j = 0; j < n; ++j)
        {
            if (lineKey & (0x1 << j))ans[i] += "#";
            else ans[i] += " ";
        }
        reverse(&ans[i][0], &ans[i][n]);
    }
    return ans;
}

TESTCASE

typedef struct testcase
{
    int n;
    vector<int> arr1, arr2;
    vector<string> expectANS;
};

void TESTCASE()
{
    testcase TC[] = {
        {5,{ 9, 20, 28, 18, 11 },{ 30, 1, 21, 17, 28 },{ "#####","# # #", "### #", "#  ##", "#####"}},
        {6,{ 46, 33, 33 ,22, 31, 50 },{ 27 ,56, 19, 14, 14, 10 },{ "######", "###  #", "##  ##", " #### ", " #####", "### # "}}
    };
    for (const auto& eachTC : TC)
        if (eachTC.expectANS == solution(eachTC.n, eachTC.arr1, eachTC.arr2)) std::cout << "OK!\n";
        else std::cout << "WRONG!!!!!\n";
}
int main()
{
    TESTCASE();
    return 0;
}

2017/10/11 17:59

신길수

def BINARY(a):                                     # 2진수로 바꾸는 함수
    X = []
    for x in a:
        X.append(bin(x)[2:])                       # 앞의 0b 제거 

    return X


n = int(input("How long is the map? : "))
print("\n")
arr1 = []   # 제 1지도
arr2 = []   # 제 2지도
arr3 = []   # 앞의 두개를 겹친 것

arr5 = []   # 우물 정자로 바꾼 것 (최종)

while len(arr1) != n:           # 제 1지도 입력
    z = int(input("Give me a number for arr1 :"))
    if z > 2**n - 1:
        print("Too Big! \n")  #특정 범위 넘을 시
        continue
    arr1.append(z)
    print("\n")

while len(arr2) != n:         # 제 2지도 입력
    Z = int(input('Give me a number for arr2 :'))
    if Z > 2**n - 1:
        print("Too Big! \n")
        continue
    arr2.append(Z)
    print("\n")

for x in range(n):
    arr3.append(int(arr1[x])|int(arr2[x]))    #겹치기

arr3 = BINARY(arr3)  #2진수화

for x in arr3:
    arr4 = []   # 우물정자 암호로 만든 후 하나씩 보관하기
    for y in x:
        if y == "1":
            arr4.append("#")
        else:
            arr4.append(" ")
    arr5.append("".join(arr4))  # 보관해 놓은 걸 문자열로 풀어서 최종 리스트에 저장

print(arr5)

python3로 풀었습니다. 작동은 하는데 너무 길고... 매끈하지 못한거 같습니다. 조언 해주시면 감사합니다.

2017/10/11 22:04

李愼言(이신언)

C++입니다. 2차원 배열 설정이 상당이 더럽군요; 배열만 써서 풀었습니다.

#include<iostream>
using namespace std;

int main()
{
    int n;
    cout << "배열의 크기 : ";
    cin >> n;

    //미로가 들어갈 배열
    int** binary = new int*[n];
    int** binary2 = new int*[n];

    for (int i = 0; i < n; i++)
    {
        binary[i] = new int[n];
        binary2[i] = new int[n];
    }

    int *num1, *num2;

    num1 = new int[n];
    num2 = new int[n];

    cout << "첫번째 요소 : ";
    for (int i = 0; i < n; i++)
        cin >> num1[i];

    cout << "두번째 요소 : ";
    for (int i = 0; i < n; i++)
        cin >> num2[i];

    //2진수로 바꿔서 OR
    for (int i = 0; i < n; i++)
    {
        int* temp = new int[n];

        for (int k = 0; k < n; k++)
            temp[k] = 0;
        int j = 0;
        while (num1[i] > 0)
        {
            temp[j] = num1[i] % 2;
            num1[i] /= 2;
            j++;
        }

        for (int k = 0; k < n; k++)
        {
            //cout << temp[k] << " ";
            binary[i][n - k - 1] = temp[k];
        }
    }

    for (int i = 0; i < n; i++)
    {
        int* temp = new int[n];

        for (int k = 0; k < n; k++)
            temp[k] = 0;
        int j = 0;
        while (num2[i] > 0)
        {
            temp[j] = num2[i] % 2;
            num2[i] /= 2;
            j++;
        }

        for (int k = 0; k < n; k++)
        {
            //cout << temp[k] << " ";
            binary2[i][n - k - 1] = temp[k];
        }
    }

    cout << "출력" << endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (binary[i][j] || binary2[i][j])
            {
                cout << "#";
            }
            else
            {
                cout << " ";
            }
        }
        cout << endl;
    }
    for (int i = 0; i < n; i++)
    {
        delete[] binary[i];
        delete[] binary2[i];
    }
    delete[] binary;
    delete[] binary2;

    return 0;
}

2017/10/15 20:50

와디더

파이썬3 풀이입니다.

def solution(n:int, arr1:[int], arr2:[int]) -> [str]:
    template = "{: %d}" % n
    return [template.format(bin(a|b)[2:].replace('0', ' ').replace('1','#'))
            for a, b in zip(arr1, arr2)]

Swift에서는 bin 함수가 기본라이브러리에 없어서 아래와 같이 구현해보았습니다.

import Foundation

func solution(n: Int, arr1: [Int], arr2: [Int]) -> [String] {

    func bin(_ a: Int, _ b: Int) -> String {
        var temp: [String] = []
        var i = 1 << (n-1)
        while i > 0 {
            temp.append((a|b) & i == 0 ? " " : "#")
            i = i >> 1
        }
        return temp.joined(separator:"")
    }
    return zip(arr1, arr2).map(bin)
}

하스켈로도 한 번 해봤습니다.

import Data.Bits

doubles :: Int -> [Int]
doubles n = n:(doubles (n*2))

convert :: Int -> Int -> String
convert width n = let ds = take width . doubles $ 1 in reverse . fmap f $ ds
  where f x = if n .&. x > 0 then '#' else ' '

solution :: Int -> [Int] -> [Int] -> [String]
solution n arr1 arr2 = fmap (convert n) . fmap (uncurry (.|.)) $ zip arr1 arr2

main = putStr . unlines $ solution 5 [9,20,28,18,11] [30,1,21,17,28]

2017/10/16 20:59

룰루랄라

package codingdojang;

import java.util.Scanner;

public class ex151 { / 입력예시 * 6 46 33 33 22 31 50 27 56 19 14 14 10 / / 출력예시 ###### ### # ## ## #### ##### ### # */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in);

    int n = sc.nextInt(); sc.nextLine();
    char map[][] = new char[n][n];
    int arr1[] = new int[n];
    int arr2[] = new int[n];

    for(int i=0; i<n; i++) {
        arr1[i] = sc.nextInt();
    }

    for(int i=0; i<n; i++) {
        arr2[i] = sc.nextInt();
    }

    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) {
            map[i][j] = ' ';
        }
    }

    for(int i=0; i<arr1.length; i++) {
        String temp = Integer.toBinaryString(arr1[i]);
        for(int j = 0; j<temp.length() ; j++){
         if(temp.charAt(j) == '1'){
          map[i][temp.length()-1-j] = '#';
         }
        } 
    }

    for(int i=0; i<arr2.length; i++) {
        String temp = Integer.toBinaryString(arr2[i]);
        for(int j = 0; j<temp.length() ; j++){
         if(temp.charAt(j) == '1'){
          map[i][temp.length()-1-j] = '#';
         }
        } 
    }

    for(int i=0; i<n; i++) {
        for(int j=n-1; j>=0; j--) {
            System.out.print(map[i][j]);
        }
        System.out.println();
    }
}

}

2017/10/17 18:15

이병호

package codingdojang;

import java.util.Scanner;

public class ex151 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt(); sc.nextLine();
        char map[][] = new char[n][n];
        int arr1[] = new int[n];
        int arr2[] = new int[n];

        for(int i=0; i<n; i++) {
            arr1[i] = sc.nextInt();
        }

        for(int i=0; i<n; i++) {
            arr2[i] = sc.nextInt();
        }

        for(int i=0; i<n; i++) {
            for(int j=0; j<n; j++) {
                map[i][j] = ' ';
            }
        }

        for(int i=0; i<arr1.length; i++) {
            String temp = Integer.toBinaryString(arr1[i]);
            for(int j = 0; j<temp.length() ; j++){
             if(temp.charAt(j) == '1'){
              map[i][temp.length()-1-j] = '#';
             }
            } 
        }

        for(int i=0; i<arr2.length; i++) {
            String temp = Integer.toBinaryString(arr2[i]);
            for(int j = 0; j<temp.length() ; j++){
             if(temp.charAt(j) == '1'){
              map[i][temp.length()-1-j] = '#';
             }
            } 
        }

        for(int i=0; i<n; i++) {
            for(int j=n-1; j>=0; j--) {
                System.out.print(map[i][j]);
            }
            System.out.println();
        }
    }

}

2017/10/17 18:17

이병호


/*
네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 
그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 
다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.
지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 “공백”(“ “) 또는 “벽”(“#”) 두 종류로 이루어져 있다.
전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 
각각 “지도 1”과 “지도 2”라고 하자. 
지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 
지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.
“지도 1”과 “지도 2”는 각각 정수 배열로 암호화되어 있다.
암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.
네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.

//입력 형식

입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.
1 ≦ n ≦ 16
arr1, arr2는 길이 n인 정수 배열로 주어진다.
정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2^n - 1을 만족한다.
출력 형식
원래의 비밀지도를 해독하여 "#", 공백으로 구성된 문자열 배열로 출력하라.

입출력 예제
 */
import java.util.Scanner;

import javax.swing.plaf.synth.SynthSpinnerUI;

class Solution {

    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); // 배열 수 입력 

        int [] arr1 = new int[n];
        int [] arr2 = new int[n]; // 배열 두 개 생성 
        int [][] binaryNumofArr1 = new int[n][n];
        int [][] binaryNumofArr2 = new int[n][n];
        char [][] finalMap = new char[n][n]; 

        for ( int i = 0; i < n; i++) { // arr1 원소 입력 
            arr1[i] = sc.nextInt();
        }

        for ( int i = 0; i < n; i++) { // arr2 원소 입력 
            arr2[i] = sc.nextInt();
        }

        for ( int i = 0; i < n; i++) { 
            for (int j = n -1; j >= 0; j--) {
                binaryNumofArr1[i][j] = arr1[i] % 2;
                arr1[i] = arr1[i] / 2;
                System.out.print(binaryNumofArr1[i][j]);

            }System.out.println(" ");
        }

        System.out.println(" ========================================== ");

        for ( int i = 0; i < n; i++) {          
            for (int j = n-1; j >= 0; j--) {
                binaryNumofArr2[i][j] = arr2[i] % 2;
                arr2[i] = arr2[i] / 2;
                System.out.print(binaryNumofArr2[i][j]);

            }System.out.println(" ");
        }

        for ( int i = 0; i < n; i++) {
            for ( int j = 0; j < n; j++) {
                if (binaryNumofArr1[i][j] == 1 || binaryNumofArr2[i][j] == 1) {
                    finalMap[i][j] = '#';
                }
                else {
                    finalMap[i][j] = ' ';
                }   
            }
        }

        for ( int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print(finalMap[i][j]);
            }
            System.out.print(',' + " ");
        }
    }
}

/*
n   5
arr1    [9, 20, 28, 18, 11]
arr2    [30, 1, 21, 17, 28]
출력  ["#####","# # #", "### #", "#  ##", "#####"] 
*/

2017/10/18 17:35

송현우


파이썬

n = 5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]

answer = ["#####", "# # #", "### #", "#  ##", "#####"]


def decoder(n, arr1, arr2):

    tempArr = []
    for i in range(n):
        tempArr.append(bin(arr1[i] | arr2[i])[2:])
        tempArr[i] = tempArr[i].replace('0', ' ').replace('1', '#')



    print(tempArr)


decoder(n, arr1, arr2)

2017/10/19 15:55

호에에

# KAKAO 3번째 문제
N = 5
ARR1 = [9, 20, 28, 18, 11]
ARR2 = [30, 1, 21, 17, 28]
COMBINED = ARR1.zip(ARR2)

def decode_set(set)
  codes, first, second = [], set[0], set[1]
  N.times do
    code = first % 2 + second % 2
    first /= 2
    second /= 2
    if code.zero?
      codes.prepend " "
    else
      codes.prepend "#"
    end
  end
  codes
end

@result = []
COMBINED.each do |set|
  @result << decode_set(set)
end

puts @result.to_s

2017/10/23 11:23

이한결

C

char b;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
         b = ((arr1[i] | arr2[i]) & (1<<(n-1-j))) ? '*' : ' ';
         printf("%c",b);
    }
    printf("\n");
}

문법도 간단하고 속도도 빠른 비트연산 만세! ('ㅅ')/

2017/10/23 14:31

아몬드

public static void main(String[] args) {
// TODO Auto-generated method stub
    int[] arr1 = {9, 20, 28, 18, 11};
    int[] arr2 = {30, 1, 21, 17, 28};
    getSecret(5, arr1, arr2);

    int[] arr3 = {46, 33, 33 ,22, 31, 50};
    int[] arr4 = {27 ,56, 19, 14, 14, 10};
    getSecret(6, arr3, arr4);
}

public static void getSecret(int n, int[] arr1, int[] arr2){
    String[] result = new String[n];
    String tmp = "";
    for(int i=0;i<n; i++){
        String n1 = checkLength(Integer.toBinaryString(arr1[i]),n);
        String n2 = checkLength(Integer.toBinaryString(arr2[i]),n);
        for(int j=0; j<n; j++){
            int c1 = Integer.parseInt(String.valueOf(n1.charAt(j)));
            int c2 = Integer.parseInt(String.valueOf(n2.charAt(j)));
            if(c1 == 0 && c2 == 0)
                tmp += " ";
            else
                tmp += "#";
        }
        result[i] = tmp;
        tmp = "";
    }

    for(int k=0; k<result.length; k++){
        System.out.print(result[k]+", ");
    }
}

public static String checkLength(String value, int n){
    String str = "";
    if(value.length() >= n)
        return value;
    else{
        for(int l=0; l<(n-value.length()); l++){
            str+="0";
        }
        str+=value;
    }
    return str;
}

2017/10/24 14:07

jake

-- 이런 문제 내는것도 대단하다~~

public class SecureMap {
    private String divide(int val, int size) {
        StringBuilder sb = new StringBuilder();

        for (int j = size - 1; j >= 0; j--) {
            if (val == 0) {
                sb.append("-");
            } else if (val == 1) {
                sb.append("#");
            } else {
                int rest = val % 2;
                sb.append(rest == 1 ? "#" : "-");
            }
            val /= 2;
        }

        return sb.toString();
    }

    public String[] findMap(int[] a, int[] b) {
        int size = a.length;
        String[] result = new String[size];

        for (int i = 0; i < size; i++) {
            String tempA = divide(a[i], size);
            String tempB = divide(b[i], size);

            result[i] = "";
            for (int j = tempA.length() - 1; j >= 0; j--) {
                if (tempA.charAt(j) == '#' || tempB.charAt(j) == '#') {
                    result[i] += "#";
                } else {
                    result[i] += "-";
                }
            }
        }

        return result;
    }

    public static void main(String[] args) {
        int[] a = new int[]{46, 33, 33, 22, 31, 50};
        int[] b = new int[]{27, 56, 19, 14, 14, 10};

        SecureMap secureMap = new SecureMap();
        String[] result = secureMap.findMap(a, b);

        for (int i = 0; i < result.length; i++) {
            System.out.println(result[i]);
        }
    }
}

2017/10/24 18:28

ohna

a = int(input())

b = list(input().split())
b = list(map(int, b))

c = list(input().split())
c = list(map(int, c))

d = []

for i in range(a):
    d.append(bin(b[i] | c[i]))

    d[i] = d[i].replace("0b", "")
    d[i] = d[i].replace("1", "#")
    d[i] = d[i].replace("0", " ")

2017/10/27 23:13

Changho Lee

Javascript (ECMA3), Internet Explorer 6 에서 사용 가능한 Code 입니다...

// polyfill
Array.prototype.fill = Array.prototype.fill ? Array.prototype.fill : function (value) {
    for (var i = 0, m = this.length; i < this; i++) {
        this[i] = value;
    }
    return this;
};

function getMap(count, array1, array2) {
    // validation of parameters
    if (typeof count !== 'number' || isNaN(count)) {
        throw new TypeError('1st parameter is required as number type');
    }
    if (1 > count || count > 16) {
        throw new Error('count is not proper');
    }
    var isArray = function (value) {
        return Object.prototype.toString.call(value) === '[object Array]';
    };
    if (!isArray(array1) || !isArray(array2)) {
        throw new TypeError('2nd and 3rd parameters are required as array type');
    }
    if (array1.length !== count || array2.length !== count) {
        throw new Error('2nd and 3rd parameters are invalid caused by 1st parameter validation');
    }
    // end of validation

    var returnArray = [];
    var padding = new Array(count).fill(0).join('');
    for (var i = 0; i < count; i++) {
        var value = (Number(array1[i].toString(2)) + Number(array2[i].toString(2))).toString();
        value = padding.substr(value.length) + value;
        returnArray.push(value.replace(/[0]/gm, ' ').replace(/[1,2]/gm, '#'));
    }
    return returnArray;
}

alert(getMap(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]));
alert(getMap(6, [46, 33, 33, 22, 31, 50], [27, 56, 19, 14, 14, 10]));

2017/12/03 20:11

Seunghwan Oh

(ns secret.core)


(defn to-digits
  [n b]
  (loop [n n
         digits ()]
    (if (pos? n)
      (recur (quot n b)
             (conj digits (mod n b)))
      digits)))

(defn padding [seq size]
  (let [cnt (count seq)
        fill-size (- size cnt)]
    (concat (repeat fill-size 0) seq)))

(defn secret [n arr1 arr2]
  (->> [arr1 arr2]
       (apply map (fn [x y]
                    (-> (bit-or x y)
                        (to-digits 2)
                        (padding n)
                        (->> (map #(if (zero? %) \space \#))
                             (apply str)))))))

(let [n 5
      arr1  [9, 20, 28, 18, 11]
      arr2  [30, 1, 21, 17, 28]]
  (secret n arr1 arr2))
;=> ("#####" "# # #" "### #" "#  ##" "#####")

(let [n 6
      arr1  [46, 33, 33 ,22, 31, 50]
      arr2  [27 ,56, 19, 14, 14, 10]]
  (secret n arr1 arr2))
;=> ("######" "###  #" "##  ##" " #### " " #####" "### # ")

2017/12/10 09:36

김 은평

def miro(n, arr1, arr2):
    temp1, temp2 = [], []
    answer = ['' for i in range(n)]
    for i in arr1:
        temp = len(bin(i)[2:]) < n and ('0' * (n-len(bin(i)[2:]))) + bin(i)[2:] or bin(i)[2:]
        temp1.append(temp)
    for i in arr2:
        temp = len(bin(i)[2:]) < n and ('0' * (n-len(bin(i)[2:]))) + bin(i)[2:] or bin(i)[2:]
        temp2.append(temp)

    for i in range(n):
        for j in range(n):
            if temp1[i][j] == '0' and temp2[i][j]  == '0':
                answer[i] += ' '
            else:
                answer[i] += '#'

    return answer

2017/12/13 17:34

bbubbush

while True:
    try:
        n = int(input('input N: '))
        if isinstance(n, int) and n < 17:
            break
        else:
            print('16이하의 자연수를 입력하세요')
    except ValueError:
        print('16이하의 자연수를 입력하세요')

def input_arr(n, arr):
    temp = 0
    for i in range(n):
        while True:
            try :
                temp = int(input(str(i + 1) + '번 째 원소: '))
            except ValueError:
                print('0이상 ' + str(2 ** n - 1) + ' 이하의 정수를 입력하세요')
            if isinstance(temp, int) and (temp < (2 ** n )):
                break
            else:
                print('0이상 ' + str(2 ** n - 1) + ' 이하의 정수를 입력하세요')
        arr.append(temp)

def bin_match(num1, num2):
    result = str()
    num1_bin = bin(num1)[2:].zfill(5)
    num2_bin = bin(num2)[2:].zfill(5)

    for i in range(5):
        if num1_bin[i] == str(1) or num2_bin[i] == str(1):
            result += '#'
        else:
            result += ' '
    print(result)

print('Input arr1: ')
arr1 = []
input_arr(n, arr1)

print('Input arr2: ')
arr2 = []
input_arr(n, arr2)

for i in range(n):
    bin_match(arr1[i], arr2[i])


2017/12/22 23:48

이영훈

#include<stdio.h>
void bin (int num, int *p);
int n;
int main(void)
{
    int arr1[16], arr2[16], i, j;
    int compare1[16], compare2[16];
    char _char[16][16];
    scanf("%d", &n);

    for(i = 0; i < n; i++)
        scanf("%d", arr1 +i);
    for(i = 0; i < n; i++)
        scanf("%d", arr2 +i);

    for( i = 0; i < n; i++)
    {
        bin(arr1[i], compare1);
        bin(arr2[i], compare2);
        for(j =0; j < n; j++)
            if(compare1[j]||compare2[j])
                _char[i][j] = '#';
            else
                _char[i][j] = ' ';
    }
    for(i = 0; i < n; i++)
    {
        for( j = 0; j < n; j++)
            printf("%c ", _char[i][j]);
        printf("\n");
    }

    return 0;
}

void bin (int num, int *p)
{
    int i, j;
    for(i = n-1; i >= 0 ; i--)
    {
        p[i] = num %2;
        num /= 2;
    }

}

2017/12/27 22:20

CodingMan

package CodingDojang;

import java.util.Scanner;
import java.util.Random;

public class test1 {
    public static void printResult(int n, int [] A, int [] B, String [] R ){
        // print 함수
        System.out.println("입력된 한 변의 크기 : " + n);
        System.out.print("arr1의 값들 : ");
        for(int i = 0; i < A.length; i++){
            System.out.print(A[i] + " ");
        }
        System.out.println();
        System.out.print("arr2의 값들 : ");
        for(int i = 0; i < B.length; i++){
            System.out.print(B[i] + " ");
        }
        System.out.println();
        System.out.print("암호 결과 : [");
        for(int j = 0; j < R.length; j++){
            System.out.print("\"");
            for(int i = 0; i < R.length; i++){
                System.out.print(R[j].charAt(i));
            }
            System.out.print("\"");
        }
        System.out.print("]");
    }

    public static void main(String args[]){

        int x = 1, n; // 정수배열의 각 원소들의 상한(x), 한 변의 크기(n)
        int [] arr1, arr2;  // 지도 1, 2
        String [] map1, map2, result; // 
        Scanner input = new Scanner(System.in);
        Random rand = new Random();
        while(true){
            System.out.print("지도 한 변의 크기 : ");
            n = input.nextInt();
            if(n < 1 || n > 16){
                System.out.println("지도 한 변의 크기는 1보다 크거나 같고 16보다는 작거나 같아야합니다.");
            } // 지도 한 변의 크기를 만족 못하는 경우 다시 입력
            else{
                arr1 = new int[n];
                arr2 = new int[n];
                map1 = new String[n];
                map2 = new String[n];
                result = new String[n];
                break; // 지도 한 변의 크기를 만족하는 경우 지도들의 크기 정의
            }
        }

        for(int i = n; i > 0; i--){
            x = x*2;
        } // x의 최대상한 계산

        for(int i = 0; i < n; i++){
            arr1[i] = rand.nextInt(x);
            arr2[i] = rand.nextInt(x);
        } // 각 지도에 범위에 맞는 값(암호)삽입 

        for(int i = 0; i < n; i++){
            map1[i] = "";
            map2[i] = "";
            int temp1 = arr1[i], temp2 = arr2[i];
            for(int j = x; j > 0; j = j/2){
                // 큰 범위의 진수부터 계산
                if(temp1 < j && temp1 >= j/2){ // 만약 해당하는 범위라면
                    map1[i] += "#"; 
                    if(j !=1)
                        temp1 = temp1 % (j/2); // #표시와 함께 나머지값을 temp1에 반환
                }
                else map1[i] += " ";

                if(temp2 < j && temp2 >= j/2){
                    map2[i] += "#";
                    if(j != 1)
                    temp2 = temp2 % (j/2); // map1과 마찬가지
                }
                else map2[i] += " ";
            }
        } // 각각의 지도의 암호를 푸는 과정

        for(int i = 0 ; i < n; i++){
            result[i] = "";
            for(int j = 0; j < n; j++){
                if( map1[i].charAt(j) == '#' || map2[i].charAt(j) == '#'){
                    result[i] += "#";
                    // 만약 각 지도의 자리에 #이 있다면 결과에도 #을 표시 
                }
                else result[i] += " "; // 그렇지 않다면 공백
            }
        }
        printResult(n, arr1, arr2, result); // print
        input.close();
    }
}

2018/01/02 15:23

박경철

실력이 많이 부족하여 난잡한 코드가 나온것 같습니다 ㅠㅠ 수정했으면 좋을 부분이나 조언부탁드립니다 ^^ - 박경철, 2018/01/02 15:25

출력값을 기대값과 동일한지 check하는 루틴을 추가하였습니다. 구현내용은 def showmap(n, arr1, arr2)함수를 참고하세요

inputs = [{"n":5, "arr1":[9,20,28,18,11], "arr2":[30,1,21,17,28], "result":["#####","# # #", "### #", "#  ##", "#####"]},
          {"n":6, "arr1":[46,33,33,22,31,50], "arr2":[27,56,19,14,14,10], "result":["######", "###  #", "##  ##", " #### ", " #####", "### # "]}]

def showmap(n, arr1, arr2):
    result = []
    for i in range(len(arr1)):
        result.append("{0:b}".format(arr1[i] | arr2[i]).zfill(n).replace("0", " ").replace("1", "#"))
    return result

for input in inputs:
    assert(input["result"] == showmap(input["n"], input["arr1"], input["arr2"]))

2018/01/17 18:18

Kim yeon hui

def miro(n, arr1, arr2):
    return [bin(arr1[i] | arr2[i])[2:].replace("1", "#").replace('0', ' ') for i in range(5)]

2018/01/22 19:06

bbubbush

##비밀지도
def decimal2binary(n, decimal_num):
    """Convert decimal number to binary number"""
    binary = ""
    while decimal_num != 1:
        binary = str(decimal_num % 2) + binary
        decimal_num = int(decimal_num / 2)
    binary = "1" + binary

    while len(binary) != n:
       binary = "0" + binary

    return binary

def map_reader(n, arr1, arr2):
    """n = # of rows, arr1 & arr2 refers to decimal lists"""
    arr1_binary = [decimal2binary(n, elem) for elem in arr1]
    arr2_binary = [decimal2binary(n, elem) for elem in arr2]

    result_list = []
    for i in range(n):
        result_text = ""
        for j in range(n):
            if arr1_binary[i][j] == "1" or arr2_binary[i][j] == "1":
                result_text += "#"
            else:
                result_text += " "
        result_list.append(result_text)
    return result_list

2018/01/24 07:45

ShinKoo Kang

파이썬 3.6

def numtobin(arr):
    arr_bin,arr_map,maplist,x = [],[],[],0
    for num in arr:# 배열안의 수들을 2진수로 변환
        x = num
        if num == 1:
            arr_bin.append(num)
        while x//2 != 0 :
            arr_bin.append(x%2)
            x = x // 2
            if x // 2 == 1:
                arr_bin.append(x%2)
                arr_bin.append(x//2)
                break
        if len(arr_bin) < n:
            for i in range(len(arr)-len(arr_bin)):
                arr_bin.append(0)
        arr_bin.reverse() 
        maplist.append(arr_bin)
        arr_bin, arr_map = [],[]
    return maplist

def main(map_case):
    result,tmp = [],""
    for arr in arr_list:
        map_case.append(numtobin(arr))
    for case in zip(map_case[0],map_case[1]): # 두 가지 맵 배열을 각 행별로 비교하여 비밀지도 배열 완성
        for i in range(len(case[0])):
            if case[0][i] == 0 and case[1][i] == 0:
                tmp += ' '
            else:
                tmp += '#'
        result.append(tmp)
        tmp = ""
    print("n =%d"%n)
    print("arr1 =",arr_list[0])
    print("arr2 =",arr_list[1],"\n")
    print(result)

if __name__ == "__main__":
    n = 5
    arr_list = [[9, 20, 28, 18, 11],[30, 1, 21, 17, 28]]
#    arr_list = [[46, 33, 33 ,22, 31, 50],[27 ,56, 19, 14, 14, 10]]
    map_case =[]
    main(map_case)
  • 결과값
n =5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28] 

['#####', '# # #', '### #', '#  ##', '#####']

n =6
arr1 = [46, 33, 33, 22, 31, 50]
arr2 = [27, 56, 19, 14, 14, 10] 

['######', '###  #', '##  ##', ' #### ', ' #####', '### # ']

2018/01/24 15:58

justbegin

class Program
    {

        static void Main(string[] args)
        {

            int[] arr1 = { 9,20,28,18,11};
            int[] arr2 = { 30,1,21,17,28};
            Hiddenmap hdm = new Hiddenmap(arr1);
            Hiddenmap hdm2 = new Hiddenmap(arr2);
            for (int i = 0; i < hdm.FinalResulter().Length; i++)
                Console.WriteLine(hdm.FinalResulter()[i]);
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();
            for (int i = 0; i < hdm2.FinalResulter().Length; i++)
                Console.WriteLine(hdm2.FinalResulter()[i]);
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();

            for (int i=0;i<arr1.Length;i++)
            {
                strcompare(hdm.FinalResulter()[i], hdm2.FinalResulter()[i]);
            }


        }
        public static void strcompare(string str1,string str2)
        {
            string result="";

            for(int i = 0; i < str1.Length; i++)
            {
                if(str1[i] == str2[i])
                {
                    result += str1[i];
                }
                else if(str1[i] == '#')
                {
                    result += str1[i];
                }
                else if (str2[i] == '#')
                {
                    result += str2[i];
                }

            }
            Console.WriteLine(result);
        }
    }

class Hiddenmap
    {
        public int[] arr;
        public Hiddenmap(int[] arr)
        {
            this.arr = arr;
        }


        public string[] FinalResulter()
        {
            string[] finalcodearr = new string[arr.Length];
            int primenum1 = 0;
            int settingnum = 0;
            for (int i = 0; i < arr.Length; i++)
            {
                if (i == 0)
                    primenum1 = arr[i];

                if (arr[i] > primenum1)
                    primenum1 = arr[i];

            }
            while(Math.Pow(2,settingnum) - 1 <= primenum1)
            {
                settingnum++;
            }

            for (int i = 0; i < arr.Length; i++)
            {
                finalcodearr[i] = this.converter(settingnum, arr[i]);
            }
            return finalcodearr;
        }

        public string converter(int n, int num)
        {
            string result = "";
            string ReverseResult = "";
            for (int i = 0; i < n; i++)
            {
                if (num >= 1)
                {
                    if (num % 2 == 1)
                        result += "#";
                    else
                        result += "0";

                    num = num / 2;
                }
                else
                {
                    result += "0";
                }

            }
            for (int i = result.Length - 1; i > -1; i--)
                ReverseResult += result[i];

            return ReverseResult;
        }
    }

2018/01/24 16:04

아작

        internal string[] PrintSecretMapBitControl(int n, int[] arr1, int[] arr2)
        {
            var outputs = new string[n];
            for (var i = 0; i < n; i++)
            {
                var curr = arr1[i] | arr2[i];
                var temp = Convert.ToString(curr, 2);
                temp = temp.Replace("0", " ").Replace("1", "#");
                outputs[i] = temp;
            }
            return outputs;
        }

2018/01/25 12:16

Straß Böhm Jäger

n = 5
inputs1 = [23,17,22, 11]
inputs2 = [3,26,29,30]
output = list()
for j in range(0,len(inputs1)):
    ret = ''
    num = inputs1[j] | inputs2[j]
    for i in range(0,n):
        if num % 2 == 0 :ret = ' ' + ret
        else: ret = '#' + ret
        num = int(num / 2)
    output.append(ret)
print(output)

2018/01/31 09:22

윤승현

# 파이썬

sample1 = (5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
sample2 = (6, [46, 33, 33, 22, 31, 50], [27, 56, 19, 14, 14, 10])
input_sample = sample2


def draw_map(n, arr1, arr2):
    line_s = []
    for t in range(n):
        c1 = arr1[t]
        c2 = arr2[t]
        line = ''
        m = 2**(n-1)
        for _ in range(n):
            if c1 >= m or c2 >= m:
                line += '#'
                if c1 >= m: c1 -= m
                if c2 >= m: c2 -= m
                m /= 2
            else:
                line += '_'
                m /= 2
        line_s.append(line)
    for m in line_s:
        print(m)
    return line_s


print(draw_map(input_sample[0], input_sample[1], input_sample[2]))

2018/02/03 23:22

olclocr

def treasuremap(n,arr1, arr2):
    def decode(n, arr):
        l = list()
        for i in arr:
            a = list()
            for j in range(n):
                if i%2 == 1:
                    a.append('#')
                else:
                    a.append(' ')
                i = i//2
            a.reverse()
            l.append(a)
        return l
    map1 = decode(n, arr1)
    map2 = decode(n, arr2)
    result = list()
    for i in range(n):
        b = list()
        for j in range(n):
            if map1[i][j] == ' ' and  map2[i][j] == ' ':
                b.append(' ')
            else:
                b.append('#')
        result.append(b)
    return result


a = int(input())
l1 = list(map(int, input("공백으로 수를 구분하시오 :").split(' ')))
l2 = list(map(int, input("공백으로 수를 구분하시오 :").split(' ')))
for i in treasuremap(a, l1, l2):
    print(i)

2018/02/15 10:50

김동하

package solr.example.solr.example;

import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List;

public class MapCalcu {

public static void main(String[]args) throws Exception{
    final int RANDOM = 100;

    BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
    List<String> result = new ArrayList<String>();

    System.out.println("Input");
    int n = Integer.valueOf(br.readLine());
    if(n>16||n<1) {
        System.out.println("Retry");
        return;
    }
    int [] arr1 = new int[n];
    int [] arr2 = new int[n];

    for(int i=0; i<n;i++) {
        int value = (int)(Math.random()*RANDOM)+1;
        arr1[i]=value;          
        for(int j=0;j<i;j++) {
            if(arr1[j] == arr1[i]) {
                --i;
            }
        }           
    }
    for(int i=0; i<n;i++) {
        int value = (int)(Math.random()*RANDOM)+1;
        arr2[i] = value;            
        for(int j=0;j<i;j++) {
            if(arr2[j] == arr2[i]) {
                --i;
            }
        }           
    }
    //end for

    for(int i=0;i<n;i++) {          
        String wall = "";
        String one = Integer.toBinaryString(arr1[i]);
        String two = Integer.toBinaryString(arr2[i]);

        char[] ones = one.toCharArray();
        char[] twos = two.toCharArray();
        for(char o:ones) {
            if(o == '1') {
                wall+="#";
            }else {
                for(char t:twos) {
                    if(t == '0') {
                        wall+=" ";
                    }else {
                        wall+="#";
                    }
                }//end twos
            }               
        }//end ones
        result.add(wall);
    }//end n for
    System.out.println("N="+n);
    for(int i:arr1) {
    System.out.print(i+" ");
    }
    System.out.println();
    for(int j:arr2) {
        System.out.print(j+" ");
    }
    System.out.println();
    System.out.println("결과="+result.toString());
}

}

2018/02/19 16:46

윤재욱

def secretMap(n, arr1, arr2):
    for i in range(n):
        print(str(bin(arr1[i]|arr2[i]))[2:].zfill(n).replace("1","#").replace("0","  "))

secretMap(5 , [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
secretMap(6 , [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10])

2018/03/08 13:52

노간

(function run(n, arr1, arr2) {
  function split(element) {
    let list = [];
    while(element !== 0) {
      if(element % 2 == 1)
        list.unshift(1);
      else
        list.unshift(0);
      element = parseInt(element / 2);
    }
    while(list.length < n)
      list.unshift(0);
    return list;
  };
  function join(arr1, arr2) {
    let result = []
      , tmp = [];
    for (let i = 0; i < arr1.length; i++) {
      for (let j = 0; j < arr1[i].length; j++) {
        if((arr1[i][j] || arr2[i][j]) === 0)
          tmp.push(' ');
        else
          tmp.push('#');
      }
      result.push(tmp)
      tmp = [];
    }
    return result;
  }
  let binary_arr1 = new Array()
    , binary_arr2 = new Array()
  if (n < 0 && n > 16 && arr1.length !== n && arr2.length !== n)
    return;
  arr1.map((element) => binary_arr1.push(split(element)));
  arr2.map((element) => binary_arr2.push(split(element)));
  return join(binary_arr1, binary_arr2)
})();

함수 설명

split

받은 요소 하나를 2진수로 나누어 저장합니다.

join

두 요소를 합쳐서 '#' 혹은 ' '으로 복호화 합니다.

2018/03/14 13:04

정주원

def test(n):
    n = int(n)
    d = []

    arr1 = str(input("arr1 배열 입력 : ")).split(",")
    arr2 = str(input("arr2 배열 입력 : ")).split(",")
    for i in range(n):
        arr1[i] = str("{0:0>" + str(n) + "}").format(str(bin(int(arr1[i]))).split("0b")[-1])
        arr2[i] = str("{0:0>" + str(n) + "}").format(str(bin(int(arr2[i]))).split("0b")[-1])
    for k in range(n):
        s = ""
        # print(arr1[k])
        for l in range(n):
            if arr1[k][l] == "1" or arr2[k][l] == "1":
                s += "#"
            else:
                s += " "
        d.append(s)
    print(d)
if __name__ == "__main__":
    test(input("n의 값 입력 : "))

2018/03/15 16:39

김태우

def decrypt_map(n, map1,map2):
    result = [0 for i in range(n)]
    for i in range(n):
        result[i] = map1[i] | map2[i]
    return result

def print_map(n, map1):
    for i in range(n):
        for s in bin(map1[i]):
            if s == '1': 
                print("#", end = "")
            elif s == '0' : 
                print(" ", end = "")
        print("")
    print("")

#해독함수
def decrypt(n, arr1, arr2):
    decrypted_map1 = decrypt_map(n, arr1,arr2)
    print_map(n, decrypted_map1)

decrypt(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
decrypt(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10])

2018/03/23 14:45

Sangwoon Park

def solvemap(n, arr1, arr2):
    map1 = [bin(x)[2:] for x in arr1]
    for scan in map1:
        if len(scan) != n:
            map1[map1.index(scan)] = '0'*(n-len(scan)) + scan
    map2 = [bin(x)[2:] for x in arr2]
    for scan in map2:
        if len(scan) != n:
            map2[map2.index(scan)] = '0'*(n-len(scan)) + scan
    summap = list(zip(map1, map2))
    finalmap = ['' for y in range(n)]
    for f, s in summap:
        for making in range(n):
            if int(f[making]) or int(s[making]):
                finalmap[summap.index((f, s))] = finalmap[summap.index((f, s))] + '#'
            else: finalmap[summap.index((f, s))] = finalmap[summap.index((f, s))] + ' '
    return finalmap

아래 코드를 더하면 지도가 프린트됩니다{.python} maps = solvemap(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]) for printing in maps: print(printing)

2018/03/29 20:14

myyh2357

#include<iostream>

using namespace std;

int main()
{
    int iArr1[] = { 9, 20, 28, 18, 11 };
    int iArr2[] = { 30, 1, 21, 17, 28 };
    int n = 5;
    int array[5][5];
    int devide;

    for(int i = 0; i < n; i++)
    {
        iArr1[i] |= iArr2[i];
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            devide = iArr1[i] % 2;
            iArr1[i] /= 2;
            array[i][j] = devide;
        }
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            (array[i][4 - j] == 0) ? cout << " " : cout << "#";
        }
        cout << endl;
    }

}

2018/04/10 23:49

Jun ki Kim

def s_bin(n):
    return bin(n)[2:].replace('1', '#').replace('0', ' ')

n = int(input("n: "))
arr1 = list(map(int,input("arr1: ").split(",")))
arr2 = list(map(int,input("arr2: ").split(",")))
s_arr = [arr1[i] | arr2[i] for i in range(n)]

print(list(map(s_bin, s_arr)))

2018/04/12 01:13

정익수

object Main extends App {
    def binary(x:Int):String = {
        x match {
            case 0 => "0"
            case 1 => "1"
            case _ => binary(x/2) + (x%2).toString
        }
    }
    def fitLength(n:Int, x:String) = "0"*(n-x.length) + x
    def findMoney(n:Int, arr1:Array[Int], arr2:Array[Int]):List[String] = {
        var ansMap:List[String] = List.empty[String]
        val findMap = arr1.map(binary(_)).map(fitLength(n, _)).zip(arr2.map(binary(_)).map(fitLength(n, _)))
        var str = ""
        for((x, y) <- findMap){
            str = ""
            for(i <- 0 until x.length){
                if(x(i) == y(i) && x(i) == '0'){
                    str += " "
                } else str += "#"
            }
            ansMap = ansMap :+ str
        }
        ansMap
    }

    println(findMoney(5, Array(9, 20, 28, 18, 11), Array(30, 1, 21, 17, 28)))
    println(findMoney(6, Array(46, 33, 33, 22, 31, 50), Array(27, 56, 19, 14, 14, 10)))


}

2018/04/17 22:55

한강희

def secret(n,arr1,arr2):
    if n < 1 or n > 16 :
        return "insert the right number"
    else :
        mylist = []
        for i,j in zip(arr1,arr2) :
            bini = str(bin(i))[2:] if len(str(bin(i))[2:]) == n else '0' * (n-len(str(bin(i))[2:])) + str(bin(i))[2:]
            binj = str(bin(j))[2:] if len(str(bin(j))[2:]) == n else '0' * (n-len(str(bin(j))[2:])) + str(bin(j))[2:]
            new = []
            for a,b in  zip(bini, binj):
                if a == b == '0' : new.append(' ')
                else : new.append('#')
            news = ''.join(new)
            mylist.append(news)
        return mylist

print(secret(5,[9,20,28,18,11],[30,1,21,17,28]))
print(secret(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10]))

2018/04/23 18:15

yijeong

public void Test2()
        {
            const int sqr = 5;
            int[] mapCode1 = new int[sqr] { 9, 20, 28, 18, 11 };
            int[] mapCode2 = new int[sqr] { 30, 1, 21, 17, 28 };
            string[] resultMap = new string[sqr] { "", "", "", "", "", };

            for (int i = 0; i < sqr; i++)
            {
                mapCode1[i] = mapCode1[i] | mapCode2[i];
                resultMap[i] = Convert.ToString(Convert.ToUInt32(mapCode1[i]), 2);
                resultMap[i] = resultMap[i].Replace("0", " ");
                resultMap[i] = resultMap[i].Replace("1", "#");
                Console.WriteLine("Result map. Line {0} : {1}", (i + 1).ToString(), resultMap[i]);
            }
            Console.ReadKey();
        }

2018/04/26 16:50

비트에이스

// 자바입니다
    public static void main(String[] args) throws Exception { 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine());

        int[] arr1 = {46, 33, 33 ,22, 31, 50};
        int[] arr2 = {27 ,56, 19, 14, 14, 10};
        String[] str = new String[t];
        String[] str2 = new String[t];

        for (int i=0; i<t; i++) {
            String a = Integer.toBinaryString(arr1[i]);
            String b = Integer.toBinaryString(arr2[i]);
            if (a.length() != t) { // 자바만 그런가 앞에 0처리를 못해서 t자리 될 때까지 앞에 0붙여줌
                String tmp = new StringBuffer(a).reverse().toString();
                while (tmp.length() != t) {
                    tmp += "0";
                }
                a = new StringBuffer(tmp).reverse().toString();
            }
            if (b.length() != t) {
                String tmp = new StringBuffer(b).reverse().toString();
                while (tmp.length() != t) {
                    tmp += "0";
                }
                b = new StringBuffer(tmp).reverse().toString();
            }
            str[i] = a;
            str2[i] = b;
        }
        System.out.print("[");
        for (int i=0; i<t; i++) {
            System.out.print("\"");
            for (int j=0; j<t; j++) {
                int a = Integer.parseInt(str[i].charAt(j) + "") + Integer.parseInt(str2[i].charAt(j) + "");
                if (a == 2 || a == 1) System.out.print("#");
                else if (a == 0) System.out.print(" ");
            }
            System.out.print(i != t-1 ? "\", " : "\"]");
        }
    } // 배열 입력받기 귀찮아서 걍 이클립스에 쳤어요. 잘 동작하네요

2018/05/04 22:46

정몽준

Python

def Map(n, arr1, arr2):
    for i, j in zip(arr1, arr2):
        a = i | j
        print(*["#" if k == "1" else " " for k in str(bin(a))[2:]])
    print()

Map(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
Map(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10])

2018/06/18 16:01

Taesoo Kim

def binary(num):
    a = num
    result = ''
    while a > 0:
        a, b = divmod(a,2)
        result = str(b)+result
    return result

def key(n, arr1, arr2):
    if not(1<= n <= 16): raise 'n의 크기가 잘못 되었습니다'
    for i in range(n):
        if not(0 <= arr1[i] <= 2**n-1): raise 'arr1 정수 크기가 잘못 되었습니다'
        arr1[i] = [int(j) for j in binary(arr1[i])]
        while len(arr1[i]) < n: arr1[i] = [0]+arr1[i]
    for i in range(n):
        if not(0 <= arr2[i] <= 2**n-1): raise 'arr2 정수 크기가 잘못 되었습니다'
        arr2[i] = [int(j) for j in binary(arr2[i])]
        while len(arr2[i]) < n: arr2[i] = [0]+arr2[i]
    for i in range(n):
        for j in range(n):
            if arr1[i][j] + arr2[i][j] > 0: arr1[i][j] = '#'
            else: arr1[i][j] = ' '
    for i in range(n):
        arr1[i] = ''.join(arr1[i])
    return arr1

grid = 5
ar1 = [9, 20, 28, 18, 11]
ar2 = [30, 1, 21, 17, 28]

print(key(grid,ar1,ar2))

2018/06/29 13:14

Creator

   int nSize            = 0;
    int nNumberOfCases  = 0;
    cout << "한변의 크기를 정해주세요 : "; cin >> nSize;   cout << endl;
    nNumberOfCases = pow(2, nSize);

    int *nArrFir = new int[nSize];  
    int *nArrSec = new int[nSize];
    int *nArrRes = new int[nSize]; 

    fill_n(nArrFir, nSize, 0);
    fill_n(nArrSec, nSize, 0);
    fill_n(nArrRes, nSize, 0);

    cout << "First Array에 0 ~ " << nNumberOfCases << "의 숫자 " << nSize << "가지 입력해 주세요." << endl;
    for (int i = 0; i < nSize; i++)
    {
        cout << "[" << i + 1 << "] : ";
        cin >> nArrFir[i];

        if (nArrFir[i] > nNumberOfCases)
        {
            cout << "입력 범위를 초과하였습니다. 다시 입력해주세요." << endl;
            i--;
        }
    }
    cout << endl;

    cout << "Second Array에 0 ~ " << nNumberOfCases << "의 숫자 " << nSize << "가지 입력해 주세요." << endl;
    for (int i = 0; i < nSize; i++)
    {
        cout << "[" << i + 1 << "] : ";
        cin >> nArrSec[i];

        if (nArrSec[i] > nNumberOfCases)
        {
            cout << "입력 범위를 초과하였습니다. 다시 입력해주세요." << endl;
            i--;
        }
    }
    cout << endl;

    for (int i = 0; i < nSize; i++)
    {
        nArrRes[i] = nArrFir[i] | nArrSec[i];
    }

    cout << "RESULT" << endl;
    string strMap = "";
    for (int i = 0; i < nSize; i++)
    {
        strMap = "";
        for (int j = 0; j < nSize; j++)
        {
            int nCheck = nArrRes[i] & (0x01 << j);

            if (nCheck == (0x01 << j))
                strMap = "#" + strMap;
            else
                strMap = " " + strMap;
        }
        cout << strMap << endl;
    }

2018/07/12 17:23

신대수

public class Javatutorial {
    public static void main(String[] args) {
        int n = 5;
        int[] arr1 = {9, 20, 28, 18, 11};
        int[] arr2 = {30, 1, 21, 17, 28};

        StringBuilder map = new StringBuilder();

        for (int i = 0; i < n; i++) {
            int x = arr1[i] | arr2[i];
            for (int j = 1 << (n - 1); j > 0; j /= 2) {
                map.append(x >= j ? "#":" ");
                x %= j;
            }           
            map.append("\n");
        }       
        System.out.println(map);
    }
}

2018/07/13 00:25

Noname

파이썬 3

def special_plus(s1, s2):
    result = ""
    for i in range(len(s1)):
        if s1[i] == "0" and s2[i] == "0":
            result += " "
        else:
            result += "#"
    return result

n = 5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]

arr1_ = [bin(i)[2:].zfill(n) for i in arr1]
arr2_ = [bin(i)[2:].zfill(n) for i in arr2]

arr12_ = [special_plus(arr1_[i], arr2_[i]) for i in range(n)]

print(arr1_)
print(arr2_)
print(arr12_)

결과

['01001', '10100', '11100', '10010', '01011']
['11110', '00001', '10101', '10001', '11100']
['#####', '# # #', '### #', '#  ##', '#####']

2018/07/13 06:53

WJ K

public class KaKaoTest {
    private static final int[] map1 = {46, 33, 33, 22, 31, 50};
    private static final int[] map2 = {27, 56, 19, 14, 14, 10};
    private static final char LINE = '\n';
    public static void main(String[] args) {
        StringBuilder builder = new StringBuilder();
        for ( int i=0, len=map1.length; i<len; i++ ) {
            String binaryString = Integer.toBinaryString(map1[i] | map2[i]).replace("1", "#").replace("0", " ");
            if ( binaryString.length() != len ) {
                builder.append(' ');
            } 
            builder.append(binaryString).append(LINE);
        }
        System.out.println(builder);
    }
}

2018/07/26 20:40

kuckjwi

import java.util.Scanner;

public class secret_map {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.println("n을 입력해주세요.");
int n = scanner.nextInt();
int[][] map1 = new int[n][n];
int[][] map2 = new int[n][n];
String[][] map1xmap2 = new String[n][n];

//map1 구성       
for (int i=0; i<n; i++) {

    System.out.println("arr1" + i + " 행을 입력해주세요.");
    int temp = scanner.nextInt();

    for (int j=n-1; j>=0; j--) {
            double a = Math.pow(2, j);
            if(temp>=a) {
            map1[i][n-j-1] = 1;
            temp -= a;
            } else {
            map1[i][n-j-1] = 0;
            }
    }
}
//map1 구성


//map2 구성
for (int i=0; i<n; i++) {

    System.out.println("arr2" + i + " 행을 입력해주세요.");
    int temp = scanner.nextInt();

    for (int j=n-1; j>=0; j--) {
        double a = Math.pow(2, j);
        if(temp>=a) {
            map2[i][n-j-1] = 1;
            temp -= a;
            } else {
            map2[i][n-j-1] = 0;
            }
    }
}
//map2 구성

//map1xmap2구성
for(int i=0; i<n; i++) {
    for(int j=0; j<n; j++) {
        map1xmap2[i][j] = String.valueOf(map1[i][j] | map2[i][j]);
        if(map1xmap2[i][j].equals("1")) {
            map1xmap2[i][j]="#";
        } else {
            map1xmap2[i][j]=" ";
        }
        } 
    }   
//map1xmap2구성



//출력
System.out.print("[");
for(int i=0; i<n; i++) {
    System.out.print("\"");
    for(int j=0; j<n; j++) {
        System.out.print(map1xmap2[i][j]);
    }
    System.out.print("\",");
}

System.out.print("]");
//출력

}

}


2018/09/28 17:48

김찬영

n = 5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]
value = []
for i in range(n):
    a1 = bin(arr1[i])[2:].zfill(n)
    a2 = bin(arr2[i])[2:].zfill(n)
    v = ''
    for j in range(n):
        if a1[j] == '1' or a2[j] == '1':
            v = v + '#'
        else:
            v = v + ' '
    value.append(v)

print(value)

2018/11/29 18:25

Dae Su Jeong

class Question1 {
// 1. 비밀 지도(난이도: 하)

  static func execute(_ n : Int,
                      _ arr1: [Int],
                      _ arr2: [Int]) -> [String]{
    var mapData = [String]()

    for idx in 0..<n {
      let xor = String(arr1[idx] | arr2[idx], radix: 2)

      var binary = xor.map{ char -> String in
        if char == "1" {
          return "#"
        } else {
          return " "
        }}.joined()

      if binary.count < n {
        binary = " " + binary
      }

      mapData.append(binary)
    }
    return mapData
  }

  static func test01() -> Bool {
    let arr1 = [9,20,28,18,11]
    let arr2 = [30,1,21,17,28]
    let result = ["#####","# # #", "### #", "#  ##", "#####"]
    return execute(5, arr1, arr2) == result
  }

  static func test02() -> Bool {
    let arr1 = [46, 33, 33 ,22, 31, 50]
    let arr2 = [27 ,56, 19, 14, 14, 10]
    let result = ["######", "###  #", "##  ##", " #### ", " #####", "### # "]
    return execute(6, arr1, arr2) == result
  }

  static func testAll() -> Bool {
    return test01() && test02()
  }
}

2018/12/13 15:38

InKwon Kim

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void program(int arr[], int num,vector<char>&iv);
void wrapper(vector<char>&iv, vector<char>&iv2);
int  main(void)
{
    int num;
    cin >> num;
    vector<char> cv;
    vector<char>cv2;


  int arr[5] = { 9,20,28,18,11 };
  program(arr, num,cv);
  int arr2[5] = { 30,1,21,17,28 };
  program(arr2, num, cv2);
  wrapper(cv, cv2);
  for (int i = 0; i < cv.size(); i++)
  {
      cout << cv[i];
  }
  cout << endl;



}
void wrapper(vector<char>&iv, vector<char>&iv2)
{
    for (int i = 0; i < iv.size(); i++) {
        if (iv[i] == '#'|| iv2[i] == '#')iv[i] = '#';
    }
}

void program(int arr[], int num,vector<char>&iv)
{
    for (int j = 0; j < 5; j++)
    {
        iv.push_back('"');
        for (int i = 0; i < 5; i++)
        {


            if (arr[j] % 2 != 0) {
                iv.push_back('1');
            }
            else {
                iv.push_back('0');
            }
            arr[j] = arr[j] / 2;
        }
        iv.push_back('"');
        iv.push_back(',');
    }

    for (vector<char>::iterator itr = iv.begin(); itr < iv.end(); itr++)
    {
        if (*itr == '1') {
            *itr = '#';
        }
        else if(*itr=='0') {
            *itr =' ';
        }

    }
}


2019/01/18 18:47

김상범

def bina(mp,n):
    l = len(bin(mp)[2:])
    return ''.join(list(map(lambda x : '#' if x == '1' else ' ',('' if l == n else '0'*(n-l)) + bin(mp)[2:])))

def comp(mp1,mp2):
    mp = ''
    for x in zip(mp1,mp2):
        if x == (' ',' '):
            mp += ' '
        else:
            mp += '#'
    return mp

def maps(n,mp1,mp2):
    maps = []
    for x in range(n):
        maps.append(comp(bina(mp1[x],n),bina(mp2[x],n)))
    return maps

2019/01/23 16:14

김영성

def Treasure(len, arr1, arr2):
    for i in range(len):
        arr1[i] = (bin(arr1[i]|arr2[i])[2:]).zfill(len).replace('1','#').replace('0',' ')
  print(arr1)

Treasure(6,[46,33,33,22,31,50],[27,56,19,14,14,10])

2019/02/03 16:03

얀차

n = int(input())
arr1 = list(map(int, input().split()))
arr2 = list(map(int, input().split()))

if n < 1 or n > 16:
    raise Exception('too large')

if len(arr1) != n or len(arr2) != n:
    raise Exception("not in range")

def secret_map(arr1, arr2, n):
    arr_bin1 = []
    arr_bin2 = []
    for i in arr1:
        x = bin(i)[2:]
        arr_bin1.append(list(x.zfill(n)))
    for i in arr2:
        x = bin(i)[2:]
        arr_bin2.append(list(x.zfill(n)))
    return arr_bin1, arr_bin2


def is_wall(arr1, arr2):
    result = []

    for i in range(len(arr1)):
        temp = ''
        for j in range(len(arr2)):
            if arr1[i][j] == '1' or arr2[i][j] == '1':
                temp += '#'
            else:
                temp += ' '
        result.append(temp)

    return result

x, y = secret_map(arr1, arr2, n)
print(is_wall(x, y))

2019/02/11 17:00

D.H.

#include <stdio.h>
#include <stdlib.h>
int main() {
    int i, j, n, *arr1, *arr2;
    scanf("%d", &n);
    if (n<1||16<n) return -1;
    arr1 = (int *)malloc(sizeof(int)*n);
    arr2 = (int *)malloc(sizeof(int)*n);
    if (!(arr1 && arr2)) return -1;
    for(i = 0; i < n; i++) scanf("%d", arr1+i);
    for(i = 0; i < n; i++) scanf("%d", arr2+i);
    for(i = 0; i < n; i++) {
        arr1[i] |= arr2[i];
        for(j = n-1; j >= 0; j--)
            printf("%c", arr1[i]&(1<<j)?'#':' ');
        printf("\n");
    }
    free(arr1);
    free(arr2);
    return 0;
}

2019/03/30 07:33

홍승표

public class 비밀지도 {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();

        Scanner scan2 = new Scanner(System.in);
        int[] arr1_int = Arrays.stream(scan2.nextLine().split(", ")).mapToInt(Integer::valueOf).toArray();
        int[] arr2_int = Arrays.stream(scan2.nextLine().split(", ")).mapToInt(Integer::valueOf).toArray();

        ArrayList<StringBuffer> 출력 = new ArrayList<StringBuffer>();

        for(int i=0; i<n; i++) {
            int a = Integer.parseInt(Integer.toBinaryString(arr1_int[i]))+Integer.parseInt(Integer.toBinaryString(arr2_int[i]));
            StringBuffer bf = new StringBuffer();
            bf.append("\"");
            for(int j =0;; j++) {
                if(a==0) {
                    break;
                }
                if(a%10==0) {
                    bf.append(" ");
                    a=a/10;
                }
                else {
                    bf.append("#");
                    a=a/10;
                }
            }
            bf.append("\"");
            출력.add(bf.reverse());
        }
        System.out.println(출력);
    }
}

2019/12/07 18:43

big Ko

n=int(input("0이상 16이하의 n을 입력하십시오: "))
arr1=list(map(int,input("[배열1]숫자를 연속해서 입력하십시오: ").split(",")))
arr2=list(map(int,input("[배열2]숫자를 연속해서 입력하십시오: ").split(",")))

def change(n): #십진법으로 표현된 수를 이진법으로 변환시켜주는 함수
    d="01"
    q,r=divmod(n,2)
    if q==0:
        return d[r]
    else:
        return change(q)+d[r]

lst1,lst2=[],[]
for num1 in arr1: #arr1에 담긴 n개의 숫자에 대해 이진법으로 변환
    bn=change(num1)
    while len(bn)<n: #이진법으로 변환시킨 수의 길이가 n보다 작으면 
        bn="0"+bn   #그 길이가 n이 될 때까지 앞에 0을 붙인다.(ex)n:5, num1: 6 -> 110 -> 00110) 
    lst1.append(bn)
for num2 in arr2:
    bn2=change(num2)
    while len(bn2)<n:
        bn2="0"+bn2
    lst2.append(bn2)
#print(lst1)
#print(lst2)

elst=[]
for i in range(len(lst1)):
    num=int(lst1[i])+int(lst2[i]) #두 리스트에 있는 변환된 이진법의 수를 더 함(ex) 01001+11110=12111)
    if len(str(num))<len(lst1[i]): #만약 변환된 이진수 둘 다 0으로 시작할 경우, 정수로 변환 시 앞의 0이 사라지므로,
        num="0"+str(num)  #더한 결과의 길이가 원본 이진수의 길이보다 작을 경우 앞에 0을 추가 
    nlst=list(map(str,str(num)))
    for i in range(len(nlst)):
        if int(nlst[i])>0: #합한 이진수의 결과에서 각 자리에 있는 수가 0보다 클 경우 "#"으로
            nlst[i]="#"
        else:
            nlst[i]=" " #그렇지 않을 경우 " "(공백)으로 변환
    elst.append("".join(nlst))
print(elst)

결과

n =5
arr1 = 9, 20, 28, 18, 11
arr2 = 30, 1, 21, 17, 28
['#####', '# # #', '### #', '#  ##', '#####']

n =6
arr1 = 46, 33, 33, 22, 31, 50
arr2 = 27, 56, 19, 14, 14, 10
['######', '###  #', '##  ##', ' #### ', ' #####', '### # ']

2020/01/28 19:22

박시원

n = int(input("1~16 : "))
arr1 = []
arr2 = []

for i in range(n):
    arr1.append(int(input()))
for i in range(n):
    arr2.append(int(input()))


arr1_bin =[]
arr2_bin =[]

for i in arr1 :
    Bin = bin(i)
    Bin = Bin[2:]
    arr1_bin.append(Bin)
for j in arr2:
    Bin = bin(j)    
    Bin =Bin[2:]
    arr2_bin.append(Bin)

print(arr1_bin)    
print(arr2_bin)    

count = 0

result_list =[]
i = 0
while count < n:    
    result = ""
    if len(arr1_bin[i]) > len(arr2_bin[i]) :
        temp = ((len(arr1_bin[i]) - len(arr2_bin[i]))) * '0' + arr2_bin[i]
        temp1 = arr1_bin[i]
    elif len(arr1_bin[i]) < len(arr2_bin[i]) :
        temp = ((len(arr2_bin[i]) - len(arr1_bin[i]))) * '0' + arr1_bin[i]
        temp1 = arr2_bin[i]
    else :
        temp =  arr2_bin[i]
        temp1 = arr1_bin[i]

    for j in range(len(temp)):
        if temp[j] == '1' or temp1[j] == '1':
            result += "#"
        else :
            result += " "
    result_list.append(result)
    i = i+1
    count +=1
print(result_list)



2020/02/09 19:10

semipooh

# 지도1과 2는 랜덤으로 생성하게 하였습니다
# 좀 더 간단한 방법이 있을텐데 라인이 길어진것 같습니다 ㅠ

import random

def get_bin_array(nn):
    arr=[]
    for i in range (0,nn):
        a=random.randint(0,2**nn-1)
        print (a,' ',end='')
        j=0
        b=[]
        while(j<nn):
            b.append(a%2)
            a=a//2
            j=j+1
        b.reverse()
        arr.append(b)
    print()
    return arr

def print_arr(x):
    print()
    for i in range (0,n):
        for j in range (0,n):
            if x[i][j]==1:
                print('#',end='')
            else:
                print(' ',end='')
        print() 

def print_arr_two(x,y):
    print()
    for i in range (0,n):
        for j in range (0,n):
            if (x[i][j] + y[i][j]) ==0:
                print(' ',end='')
            else:
                print('#',end='')
        print() 

n=int(input('비밀지도의 크기를 입력하세요....'))

print()
arr1=[]
print('arr1 = ',end='')
arr1=get_bin_array(n)
print(arr1)

print()
arr2=[]
print('arr2 = ',end='')
arr2=get_bin_array(n)
print(arr2)

print_arr(arr1)
print_arr(arr2)
print_arr_two(arr1,arr2)

2020/03/20 03:11

Buckshot

def SM(m1, m2):
    output = []
    arr = [format(a1 | a2, 'b') for a1, a2 in zip(m1, m2)]
    mapping = {'1': '#', '0': ' '}
    for s in arr:
        for key, replacement in mapping.items():
            s = s.replace(key, replacement)
        output.append(s)
    return output

if __name__ == '__main__':
    print(SM([9, 20, 28, 18, 11], [30, 1, 21, 17, 28]))

2020/05/11 13:57

Hwaseong Nam

n = int(input())
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]
arr1ref = []
arr2ref = []
arrfinal = []
for i in arr1:
    arr1ref.append(bin(i)[2::].zfill(n))
for i in arr2:
    arr2ref.append(bin(i)[2::].zfill(n))
for i in range(0,n):
    for k in range(0,n):
        arrfinal.append(int(arr1ref[i][k]) + int(arr2ref[i][k]))
result = [arrfinal[i * n:(i + 1) * n] for i in range((len(arrfinal) + n - 1) // n )] 
print(result) 
for i in range(0,n):
    for k in range(0,n):
        if result[i][k] >= 1:
            result[i][k] = '#'
        else:
            result[i][k] = ' '
print(result)

2020/05/20 22:55

Money_Coding

def binary_sum(n, arr1, arr2):
    v_list=[]
    for i in range(n):
        v_str=''
        b_val=bin(arr1[i]|arr2[i])[2:]
        cnt=len(b_val)
        while cnt<n:
            v_str+=' '
            cnt+=1
        for j in range(len(b_val)):
            if b_val[j]=='1':v_str+='#'
            else:v_str+=' '
        v_list.append(v_str)
    return v_list


if __name__ == "__main__":
    print(binary_sum(5,[9, 20, 28, 18, 11],[30, 1, 21, 17, 28]))
    print(binary_sum(6,[46, 33, 33 ,22, 31, 50],[27 ,56, 19, 14, 14, 10]))

2020/07/20 16:02

배기경

package Test;

public class Test2 {
    public static void main(String[] args) {
        int[] arr1 = {46, 33, 33 ,22, 31, 50};
        int[] arr2 = {27 ,56, 19, 14, 14, 10};
        int n = 6;

        String[] map1 = new String[arr1.length];
        String[] map2 = new String[arr2.length];
        String[] result = new String[arr1.length];

        for(int a = 0; a < arr1.length; a++) {
            map1[a] = IntToBinary(arr1[a],n);
            map2[a] = IntToBinary(arr2[a],n);
        }

        for(int a = 0; a < map1.length; a++) {
            result[a] = mergeString(map1[a],map2[a]);
        }

        for(String x : result) System.out.print(x +",");

    }

    public static String IntToBinary(int a, int n) {
        String temp = Integer.toBinaryString(a);
        while(temp.length() < n) {
            String zero = "0";
            temp = zero.concat(temp);
        }
        return temp;
    }

    public static String mergeString(String input1, String input2) {
        StringBuilder result = new StringBuilder();
        for(int i = 0; i < input1.length(); i++) {
            if(input1.charAt(i) == input2.charAt(i)) { 
                if(input1.charAt(i) == '0') result.append(" ");
                else result.append("#");
            } else {
                result.append("#"); 
            }
        }
        return result.toString();
    }
}

2020/09/19 14:43

nazunamoe

def secretMap(n, arr1, arr2):
    temp1 = [bin(i)[2:].zfill(n) for i in arr1]
    temp2 = [bin(i)[2:].zfill(n) for i in arr2]
    result = []
    for i in range(n):
        temp = ''
        for k in range(n):
            if int(temp1[i][k]) or int(temp2[i][k]):
                temp += '#'
            if not(int(temp1[i][k]) or int(temp2[i][k])):
                temp += ' '
        result.append(temp)
    print(result)


secretMap(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
secretMap(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10])

2020/12/01 16:49

김우석

def binary(number):

  for_answer=[]

  while number:

    for_answer.append(number%2)

    number=int(number/2)


  for_answer.reverse()

  for_answer=[str(x) for x in for_answer]

  return "".join(for_answer)

def treasure_map(n,arr1,arr2):

  array=[[' ']*n for i in range(n)]

  for_answer=[]

  for i in range(0,n,1):

    bin1=binary(arr1[i])

    binxx=bin1.replace('1','#')

    binx=binxx.replace('0',' ')

    bin2=binary(arr2[i])

    binyy=bin2.replace('1','#')

    biny=binyy.replace('0',' ')

    len1=len(bin1)

    len2=len(bin2)

    for j in range(-1,-len1-1,-1):

      if array[i][-j-1]==' ':

        array[i][-j-1]=binx[j]

    for k in range(-1,-len2-1,-1):

      if array[i][-k-1]==' ':

        array[i][-k-1]=biny[k]

    array[i].reverse()

    array[i]=[str(x) for x in array[i]]

    array[i]=''.join(array[i])

    for_answer.append(array[i])

  return for_answer

def main():

  n=int(input(""))

  arr1=input("")

  arrx=arr1.split(' ')

  arrx=[int(x) for x in arrx]

  arr2=input("")

  arry=arr2.split(' ')

  arry=[int(x) for x in arry]

  print(treasure_map(n,arrx,arry))

main()

2021/01/17 22:02

전준혁

def merger(first, second, n):
  arr1 = [(n-len(str(bin(i))[2:]))*'0'+str(bin(i))[2:] for i in first]
  arr2 = [(n-len(str(bin(i))[2:]))*'0'+str(bin(i))[2:] for i in second]
  mergedarr = ['']*n
  for i in range(n):
    for j in range(n):
      mergedarr[i] += '#' if arr1[i][j]=='1' or arr2[i][j]=='1' else ' '
  return mergedarr

a=[46, 33, 33 ,22, 31, 50]
b=[27 ,56, 19, 14, 14, 10]
n=6
print(merger(a, b, n))

2021/01/30 23:25

박영빈

# 이진수로 변환
def convert(n):
    result = ''
    while True:
        q, r = divmod(n, 2)
        result = str(r) + result
        n = q
        if q == 0:
            break
    return result

def secret_map(n, arr1, arr2):
    new_arr1 = [convert(i).zfill(n) for i in arr1]
    new_arr2 = [convert(j).rjust(n, '0') for j in arr2]

    for i in range(n):
        for j in range(n):
            if new_arr1[i][j] == '0' and new_arr2[i][j] == '0':
                print(' ', sep='', end='')
            else:
                print('#', sep='', end='')
        print()

secret_map(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
secret_map(6, [46, 33, 33, 22, 31, 50], [27, 56, 19, 14, 14, 10])

2021/02/25 12:57

Ha

def secret_map(arr1,arr2,n):
    q=[]
    w=[]
    z=[]
    t=[]
    for i in arr1:
        a = int(bin(i)[2:])  
        q.append(a)
    for j in arr2:
        b = int(bin(j)[2:])
        w.append(b)
    for a in range(len(arr1)):
        z.append(q[a]+w[a])
    for i in z:
        r = str(i)
        p=''
        for v in range(len(r)):
            if r[v]=='1' or r[v]=='2':
                p+="#"
            else:
                p+='0'
        if len(p)<n:
            for i in range(n-len(p)):
                a = p.split()
                a.insert(i,' ')
                p = ''.join(a)
        t.append(p)
        for i in range(len(t)):
            t[i] = t[i].replace('0',' ')
    print(t)


arr1 = [46, 33, 33 ,22, 31, 50]
arr2 = [27 ,56, 19, 14, 14, 10]
secret_map(arr1,arr2,6)

['######', '### #', '## ##', ' #### ', ' #####', '### # ']

2021/03/12 21:58

fox.j

def smap(n,a,b):
    if 1<=n<=16 :
        a1 = ""
        b1 = ''
        for a,b in zip(a,b):
            a1 += f'{bin(a)[2:]:0>{n}} '
            b1 += f'{bin(b)[2:]:0>{n}} '
        l= []
        e = ''
        for i in range(n):
            for i2 in range(n):
                if a1.split()[i][i2]=='0' and b1.split()[i][i2]=='0': e +=' '
                else : e += '#'
            l.append(e)
            e = ''
        return l
    else : return '1<=n<=16'

n = 6
a =[46, 33, 33 ,22, 31, 50]
b =[27 ,56, 19, 14, 14, 10]

print(smap(n,a,b))

2021/06/07 12:00

약사의혼자말

def binary(num):
    result = []
    num_temp = int(num)
    while num_temp >= 2 :
        result.append(num_temp%2)
        num_temp = num_temp // 2 
    result.append(num_temp)

    result.reverse()
    return result

def array_generation(n):
    array = []
    for i in range(1, n+1):
        array_input = int(input('input array {} : '.format(i)) )
        if array_input >= 0 and array_input <= (2**n -1):
            array.append(array_input)
        else:
            print('ERROR : invalid input')
            exit()

    return array

def translation_array(_list):
    result = []
    for member in _list:
        _temp = binary(member)
        for i in range(len(_list) - len(_temp)):
            _temp.insert(0, 0)

        result_temp = []
        for member1 in _temp:
            if member1 == 1:
                result_temp.append('#')
            else:
                result_temp.append(' ')
        result.append(''.join(result_temp))

    return result

def array_comparison(array1, array2):
    n = len(array1)
    result = []
    for i in range(n):
        result_temp = []
        for j in range(n):
            if array1[i][j] == '#' or array2[i][j] == '#':
                result_temp.append('#')
            elif array1[i][j] == ' ' and array2[i][j] == ' ':
                result_temp.append(' ')
        result.append(''.join(result_temp))

    return result

if __name__ == '__main__':
    n = int(input('Type n (between 1 and 16) : '))
    if n >=1 and n <=16:
        array1 = translation_array(array_generation(n))
        array2 = translation_array(array_generation(n))

        print(array_comparison(array1, array2))

    else:
        print('ERROR : invalid range of n (1 ~ 16)')
        exit()

2021/07/02 09:10

DSHIN

#codingdojing_secret_map_re

'''
1. n을 정수로 입력받는다. 
2. arr1, arr2를 입력받는다. ex) 9, 20, 28, 10, 11 형식
3. 숫자만 남긴다.
4. zip해서 bit연산 |
5. 2진법 숫자로 변환 후, 1은 #, 0은 공백으로 변환
'''
import sys

n = eval(input('n: '))

arr1 = list(map(eval,input('arr1: ').split(',')))
arr2 = list(map(eval,input('arr2: ').split(',')))

if len(arr1) != n and len(arr1) != n:
    print('input error')
    sys.exit()
else:
    result = [a|b for a,b in zip(arr1, arr2)]

##tranlate to binary num.

secret_map = []
for i in result:
    secret_map.append(bin(i)[2:].zfill(n).translate(str.maketrans('10', '# ')))

print(secret_map)

2021/10/17 17:05

Jaeman Lee

def Sol (a,b):
   arr=[]
   for i in range(len(a)):
      if int(a[i])+int(b[i])==0:
         arr.append(' ')
      else:
         arr.append('#')
   return "".join(arr)

while True: 
    n =  int(input("비밀지도의 변의 길이:"))
    if n>=1 and n<=16:
        break

arr1=[]
arr2=[]
arr = "".join(['0' for i in range(n)])
for i in range(n):
    while True:
        print("첫번째 지도의 ",i+1,"번째")
        x=int(input("원소를 입력하시오"))
        if x>=0 and x<=2**n -1 :
            a = arr+bin(x)[2:]
            arr1.append(a[-n:])
            break

for k in range(n):
    while True:
        print("두번째 지도의 ",k+1,"번째")
        x=int(input("원소를 입력하시오"))
        if x>=0 and x<=2**n -1 :
            a = arr+bin(x)[2:]
            arr2.append(a[-n:])
            break

result = []
for j in range(len(arr1)):
    result.append(Sol(arr1[j],arr2[j]))

print(result)

2022/01/13 23:30

양캠부부

using System;
using System.Collections.Generic;

namespace solution
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = 5;
            int[] arr1 = new int[] { 9, 20, 28, 18, 11 };
            int[] arr2 = new int[] { 30, 1, 21, 17, 28 };

            //int n = 6;
            //int[] arr1 = new int[] { 46, 33, 33, 22, 31, 50 };
            //int[] arr2 = new int[] { 27, 56, 19, 14, 14, 10 };

            var map = makeMap(arr1, arr2, n);

            Console.WriteLine("\n\t [\"{0}\"]", string.Join("\", \"", map));
        }        

        private static List<string> makeMap(int[] arr1, int[] arr2, int n)
        {
            List<string> mapLst = new List<string>();
            string str = "";
            int row = arr1.Length;
            for (int r = 0; r < row; r++)
            {
                str = "";
                string str1 = int.Parse(Convert.ToString(arr1[r], 2)).ToString("D"+n.ToString());
                string str2 = int.Parse(Convert.ToString(arr2[r], 2)).ToString("D" + n.ToString());
                for (int c = 0; c < n; c++)
                {
                    str += (str1[c] == '0' && str2[c] == '0') ? " " : "#";
                }
                mapLst.Add(str);
            }
            return mapLst;
        }
    }
}

2023/10/04 18:13

insperChoi

목록으로