코딩굼벵이
구르는 중
코딩굼벵이
  • 분류 전체보기 (115)
    • [C_C++]이론 공부 (17)
      • 알고리즘 (11)
      • 이론+STL (6)
    • [C_C++]코딩테스트 연습 (45)
      • [프로그래머스] level 1 (26)
      • [프로그래머스] level 2 (5)
      • [백준] 일반 문제 (12)
      • 기타 (2)
    • Solana (28)
      • Documentation (9)
      • Validator - 공부 (10)
      • Validator - 실행 (devnet & te.. (6)
      • 그 외 (3)
    • React (4)
    • Linux (2)
    • Javascript (2)
    • 블록체인 기반 핀테크 및 응용 SW 개발 (8)
      • React (1)
      • Javascript (3)
      • Solidity (3)
      • 프로젝트 (1)
    • 기타 (9)

블로그 메뉴

  • 🌟 깃허브
  • 🌿 Portfolio(2021)
  • 홈
  • 태그
  • 방명록

티스토리

최근 글

태그

  • Hooks #React
  • 솔라나
  • Immer #ContextAPI
  • 밸리데이터
  • grafana
  • 모니터링

인기 글

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
코딩굼벵이

구르는 중

[C++] 프로그래머스 - 비밀지도
[C_C++]코딩테스트 연습/[프로그래머스] level 1

[C++] 프로그래머스 - 비밀지도

2021. 7. 21. 16:34
728x90

내 풀이

  1. 배열의 수를 이진법 string으로 만든다. 나머지로 나오는 숫자는 모두 char로 뽑아서 붙인 다음 리버스해줬다.
  2. 이진수들은 string 배열에 차례로 넣고 둘 중에 하나라도 1이면 벽, 즉 #을 넣고 아니면 공백을 담는다.
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> bin1, bin2;
    vector<string> combine;
    //이진법 만들기
    for (int i = 0; i < n; i++) {
        string tmp1, tmp2;
        for (int j = 0; j < n; j++) {
            //일의자리부터 들어감
            tmp1.push_back(arr1[i] % 2 + '0');
            tmp2.push_back(arr2[i] % 2 + '0');
            arr1[i] /= 2;
            arr2[i] /= 2;
        }
        reverse(tmp1.begin(), tmp1.end());
        reverse(tmp2.begin(), tmp2.end());
        bin1.push_back(tmp1);
        bin2.push_back(tmp2);
    }

    for (int i = 0; i < n; i++) {
        string tmp;
        for (int j = 0; j < n; j++) {
            bin1[i][j] == '1' || bin2[i][j] == '1' ? tmp.push_back('#') : tmp.push_back(' ');
        }
        combine.push_back(tmp);
    }

    return combine;
}

 

다른 사람의 풀이

  1. 십진수를 비트연산자로 비교해 이진수끼리 비교 후 조건에 맞게 바꾼 십진수를 처음 배열에 넣었다.
    → 불필요한 변환과정 X, 메모리 사용 감소, 코드 길이 감소
  2. string을 붙일 때 push_back 이나 += 대신 a = b + a; 방식을 사용해서 따로 리버스하지 않아도 됨.
  3. string이 아닌 int형 십진수가 대상이므로 [i][j]로 부르지 않고 시프트 연산자를 이용해 2씩 나눠줌.
    arr1[i] = arr1[i] >> 1; 은 arr1[i] /= 2; 와 같은 작업.
#include <string>
#include <vector>

using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    for(int i=0; i <n; i++){
        arr1[i] = arr1[i]|arr2[i];
        string ans = "";
        for(int j = 0; j<n; j++){
            if(arr1[i] % 2 == 0) ans = " " + ans;
            else ans = "#" + ans;
            arr1[i] = arr1[i] >> 1;
        }
        answer.push_back(ans);
    }
    return answer;
}

'[C_C++]코딩테스트 연습 > [프로그래머스] level 1' 카테고리의 다른 글

[C++] 프로그래머스 - 문자열 내 마음대로 정렬하기  (0) 2021.07.22
[C++] 프로그래머스 - 다트 게임  (0) 2021.07.21
[C++] 프로그래머스 - 3진법 뒤집기  (0) 2021.07.18
[C++] 프로그래머스 - 실패율 (pair, sort - bool)  (0) 2021.07.18
[C++] 프로그래머스 - 숫자 문자열과 영단어  (0) 2021.07.16
    '[C_C++]코딩테스트 연습/[프로그래머스] level 1' 카테고리의 다른 글
    • [C++] 프로그래머스 - 문자열 내 마음대로 정렬하기
    • [C++] 프로그래머스 - 다트 게임
    • [C++] 프로그래머스 - 3진법 뒤집기
    • [C++] 프로그래머스 - 실패율 (pair, sort - bool)
    코딩굼벵이
    코딩굼벵이
    구르는 재주 연마 중

    티스토리툴바