기록하지 않았다면 잃어버릴 시간들
Home
  • 분류 전체보기 (184)
    • Lang (6)
      • c++ (2)
      • Java (2)
      • python (2)
    • 프레임워크 (18)
      • Spring (16)
      • JPA (2)
    • 알고리즘 (141)
      • 이론 (4)
      • 백준 (59)
      • Codility (13)
      • 프로그래머스 (65)
    • CS (4)
      • 운영체제 (0)
      • 자료구조 (0)
      • DB (4)
      • 네트워크 (0)
      • 보안 (0)
    • 기타 (7)
    • 프로젝트 (4)
      • 게시판 만들기로 배우는 Spring Data JP.. (4)
Home
  • 분류 전체보기 (184)
    • Lang (6)
      • c++ (2)
      • Java (2)
      • python (2)
    • 프레임워크 (18)
      • Spring (16)
      • JPA (2)
    • 알고리즘 (141)
      • 이론 (4)
      • 백준 (59)
      • Codility (13)
      • 프로그래머스 (65)
    • CS (4)
      • 운영체제 (0)
      • 자료구조 (0)
      • DB (4)
      • 네트워크 (0)
      • 보안 (0)
    • 기타 (7)
    • 프로젝트 (4)
      • 게시판 만들기로 배우는 Spring Data JP.. (4)
블로그 내 검색

기록하지 않았다면 잃어버릴 시간들

새로운 것을 배우는게 즐거운 개발자입니다.

  • 알고리즘/프로그래머스

    2022 카카오 블라인드 코딩테스트 6번

    2022. 2. 5.

    by. 내이름은 킹햄찌

    https://programmers.co.kr/learn/courses/30/lessons/92344

     

    코딩테스트 연습 - 파괴되지 않은 건물

    [[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5]] [[1,0,0,3,4,4],[1,2,0,2,3,2],[2,1,0,3,1,2],[1,0,1,3,3,1]] 10 [[1,2,3],[4,5,6],[7,8,9]] [[1,1,1,2,2,4],[1,0,0,1,1,2],[2,2,0,2,0,100]] 6

    programmers.co.kr

    2022 카카오 블라인드 코딩테스트 6번

    작년에 인턴쉽문제를 풀었을때 누적합 문제가 있어서 조금 깊게 공부했는데

    누적합의 확장인 imos법이라는게 있었음 

    시간복잡도도 좋고, 풀이법도 간단하여 기억하고 있었는데 딱 적용시킬 수 있는 문제라고 생각됨

    아래 참고

    https://imoz.jp/algorithms/imos_method.html

     

    いもす法

    図 2: モンスターが現れる矩形(赤色)と, 各タイルで現れるモンスターの種類の数

    imoz.jp

    #include <string>
    #include <vector>
    #define MAX 1004
    using namespace std;
    int arr[MAX][MAX];
    
    int max(int a, int b) {
    	return a > b ? a : b;
    }
    
    int imos(vector<vector<int>> board, vector<vector<int>> skill) {
    	//set damage
    	for (auto index : skill) {
    		//index[0] = type
    		//index[1] = fy
    		//index[2] = fx
    		//index[3] = sy
    		//index[4] = sx
    		//index[5] = damage
    		int type = 1;
    		if (index[0] == 1)
    			type *= (-1);
    
    		arr[index[1]][index[2]] += index[5] * type;
    		arr[index[3] + 1][index[4] + 1] += index[5] * type;
    		arr[index[1]][index[4] + 1] -= index[5] * type;
    		arr[index[3] + 1][index[2]] -= index[5] * type;
    
    	}
    	//damage 배열 계산
    	for (int i = 1; i < board.size(); i++) {
    		for (int j = 0; j < board[i].size(); j++) {
    			arr[i][j] += arr[i - 1][j];
    		}
    	}
    	for (int i = 0; i < board.size(); i++) {
    		for (int j = 1; j < board[i].size(); j++) {
    			arr[i][j] += arr[i][j - 1];
    		}
    	}
    
    	//기존 건물값에 damage 계산
    	for (int i = 0; i < board.size(); i++) {
    		for (int j = 0; j < board[i].size(); j++) {
    			arr[i][j] += board[i][j];
    		}
    	}
    
    	//파괴된 건물 계산
    	int cnt = 0;
    	for (int i = 0; i < board.size(); i++) {
    		for (int j = 0; j < board[i].size(); j++) {
    			if (arr[i][j] >0)
    				cnt++;
    		}
    	}
    	return cnt;
    
    
    }
    
    int solution(vector<vector<int>> board, vector<vector<int>> skill) {
    	int answer = imos(board, skill);
    	return answer;
    }

    아이디어

    imos알고리즘을 그대로 사용했음

    '알고리즘 > 프로그래머스' 카테고리의 다른 글

    Programers K번째수  (0) 2022.03.12
    Programers 전화번호 목록  (0) 2022.03.12
    Programers 완주하지 못한 선수  (0) 2022.03.12
    2022 카카오 블라인드 코딩테스트 5번  (0) 2022.02.05
    2022 카카오 블라인드 코딩테스트 4번  (0) 2022.01.29

    댓글

    관련글

    • Programers 전화번호 목록 2022.03.12
    • Programers 완주하지 못한 선수 2022.03.12
    • 2022 카카오 블라인드 코딩테스트 5번 2022.02.05
    • 2022 카카오 블라인드 코딩테스트 4번 2022.01.29
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
내이름은 킹햄찌

티스토리툴바