ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [이취코] ch04. 구현 유형 문제 풀이
    Major/Algorithms 2022. 3. 15. 17:11

    #1 시각

    [문제]

    - 가능한 모든 시각의 경우를 하나씩 모두 세서 풀 수 있는 문제

    - 완전 탐색 (Brute Forcing) 문제 유형 -> 가능한 경우의 수를 모두 검사해보는 탐색 방법

     

    [코드] cpp

    #include <iostream>
    
    using namespace std;
    
    int h, cnt;
    
    // 특정한 시각 안에 '3'이 포함되어 있는지의 여부
    bool check(int h, int m, int s) {
        if (h % 10 == 3 || m / 10 == 3 || m % 10 == 3 || s / 10 == 3 || s % 10 == 3)
            return true;
        return false;
    }
    
    int main(void) {
        // H를 입력받기 
        cin >> h;
        for (int i = 0; i <= h; i++) { //시(h)
            for (int j = 0; j < 60; j++) { //분(m)
                for (int k = 0; k < 60; k++) { //초(s)
                    // 매 시각 안에 '3'이 포함되어 있다면 카운트 증가
                    if (check(i, j, k)) cnt++;
                }
            }
        }
        cout << cnt << '\n';
        return 0;
    }

    - for문으로 시/분/초를 반복하면서 3이 포함될때마다 cnt++ 카운트 증가 

     

    #2 왕실의 나이트

    [문제]

    [코드] cpp

    #include <iostream>
    
    using namespace std;
    
    string inputData;
    int dx[] = { -2,-1,1,2,2,1,-1,-2 };
    int dy[] = { -1,-2,-2,-1,1,2,2,1 };
    
    int main(void) {
    
    	//현재 나이트의 위치 입력받기
    	cin >> inputData;
    	int row = inputData[1] - '0'; // 아스키코드를 빼줌으로써 문자를 숫자로 전환
    	int column = inputData[0] - 'a' + 1;
    
    	//8가지 방향에 대해 각 위치로 이동이 가능한지 확인
    	int result = 0;
    	for (int i = 0; i < 8; i++) {
    		//이동하고자 하는 위치로 이동
    		int nextRow = row + dx[i];
    		int nextCol = column + dy[i];
    
    		//이동가능하다면 카운트 증가
    		if (nextRow >= 1 && nextRow <= 8 && nextCol >= 1 && nextCol <= 8)
    			result+=1;
    	}
    
    	cout << result << '\n';
    	return 0;
    }

     

    #3 문자열 재정렬

    [문제]

     

    [코드] cpp

    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    using namespace std;
    
    string inputData;
    vector<char> result;
    int value = 0;
    
    int main(void) {
    	cin >> inputData;
    
    	//입력된 문자열을 하나씩 확인
    	for (int i = 0; i < inputData.size(); i++) {
    
    		//알파벳인 경우 리스트에 삽입
    		if (isalpha(inputData[i])) {
    			result.push_back(inputData[i]);
    		}
    		//숫자는 따로 더하기
    		else
    			value += inputData[i] - '0'; //아스키코드를 빼면서 문자를 숫자로 전환
    	}
    
    	//알파벳을 오름차순으로 정렬
    	sort(result.begin(), result.end());
    
    	//알파벳을 차례대로 출력
    	for (int i = 0; i < result.size(); i++) {
    		cout << result[i];
    	}
    	//숫자가 존재하는 경우 가장뒤에 출력
    	if (value != 0)
    		cout << value;
    
    	cout << '\n';
    }

    - 리스트에 저장된 알파벳을 정렬해 출력 & 합계 출력

     

    **

    수와 숫자의 차이점?

    - 수: 100,1000,1000 등 크기, 숫자를 말함

    - 숫자: 0~9 까지 한자릿수의 수를 말함

     

    ** 

    정렬함수 sort()를 사용하기 위해서는 <algorithm> 헤더파일 필요

    <vector> 컨테이너를 사용하기 위해서는 <vector> 헤더파일 필요

Designed by Tistory.