기록하지 않았다면 잃어버릴 시간들
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)
블로그 내 검색

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

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

  • 알고리즘/백준

    BOJ1062/C++

    2022. 3. 12.

    by. 내이름은 킹햄찌

    https://www.acmicpc.net/problem/1062

     

    1062번: 가르침

    첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문

    www.acmicpc.net

    백준 온라인저지 1062번입니다.

    DFS를 이용하여 풀었습니다.

     

    #include<iostream>
    #include<vector>
    #include<string>
    #define MAX 26
    using namespace std;
    
    bool alpa[MAX];
    int n, k;
    int sol;
    vector<string> str;
    
    int max(int a, int b) {
    	return a > b ? a : b;
    }
    
    
    void Input() {
    	string s;
    	cin >> n >> k;
    
    	for (int i = 0; i < n; i++) {
    		cin >> s;
    		str.push_back(s);
    	}
    
    }
    void dfs(int current, int cnt) {
    	if (cnt == 0) {
    		int sCnt = 0;
    		for (auto iter : str) {
    			bool flag = true;
    			for (int i = 4; i < iter.size() - 4; i++) {
    				if (alpa[iter[i]-'a']) continue;
    				flag = false;
    				break;
    			}
    			if (flag)
    				sCnt++;
    		}
    		sol = max(sol, sCnt);
    	}
    	for (int i = current; i < MAX; i++) {
    		if (alpa[i]) continue;
    
    		alpa[i] = true;
    		dfs(i, cnt-1);
    		alpa[i] = false;
    	}
    }
    void solution() {
    	int state = 0;
    	vector<int> v;
    
    	fill(alpa, alpa + MAX, false);
    	alpa['a' - 'a'] = true;
    	alpa['n' - 'a'] = true;
    	alpa['t' - 'a'] = true;
    	alpa['c' - 'a'] = true;
    	alpa['i' - 'a'] = true;
    
    	dfs(0, k-5);
    
    }
    
    int main(void) {
    	Input();
    	solution();
    	cout << sol;
    }

    아이디어

    앞뒤로 "anta" 와 "tica"이 붙기때문에 실제 단어는 n-5개이다

    완전탐색을 DFS로 풀면 됨

     

    신경써야할 반례입니다. 

    1 5 

    antatica

     

    '알고리즘 > 백준' 카테고리의 다른 글

    BOJ16938 캠프준비 / C++  (0) 2022.03.13
    BOJ18119 단어 암기 /C++  (0) 2022.03.13
    BOJ14391/ C++  (0) 2022.01.26
    BOJ1094/ C++  (0) 2022.01.26
    BOJ2098/ C++  (0) 2022.01.26

    댓글

    관련글

    • BOJ16938 캠프준비 / C++ 2022.03.13
    • BOJ18119 단어 암기 /C++ 2022.03.13
    • BOJ14391/ C++ 2022.01.26
    • BOJ1094/ C++ 2022.01.26
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

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

티스토리툴바