https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV139KOaABgCFAYh&categoryId=AV139KOaABgCFAYh&categoryType=CODE&problemTitle=1208&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int cha;
void run() {
    int d;
    cin >> d;
    int arr[100];

    for (int i = 0; i < 100; i++) {
        cin >> arr[i];
    }

    for (int i = 0; i < d; i++) {
        sort(arr, arr + 100);
        if (arr[99] - arr[0] < 2) break;
        arr[0]++;
        arr[99]--;
    }

    sort(arr, arr + 100);
    cha = arr[99] - arr[0];
}

int main() {
    int sun = 0;

    for (int i = 0; i < 10; i++)
    {
        sun++;
        run();
        cout << "#" << sun << " " <<cha << endl;
    }
    
    return 0;
}

'APS > SWEA' 카테고리의 다른 글

1961. 숫자 배열 회전 C++  (0) 2021.08.27
1209. [S/W 문제해결 기본] 2일차 - Sum C++  (0) 2021.08.26
1206. [S/W 문제해결 기본] 1일차 - View  (0) 2021.08.26
2007. 패턴 마디의 길이  (0) 2021.08.25
3499. 퍼펙트 셔플  (0) 2021.08.25
#include<iostream>
#include<vector>
#include<algorithm>
 
using namespace std;
 
vector<int>arr;
 
int cnt = 0;
void check(int i) {
    int jo[4];
    jo[0] = arr[i] - arr[i - 2];
    jo[1] = arr[i] - arr[i - 1];
    jo[2] = arr[i] - arr[i + 1];
    jo[3] = arr[i] - arr[i + 2];
 
    sort(jo, jo + 4);
 
    cnt += jo[0];
}
 
void run() {
    arr.clear();
    cnt = 0;
 
    int n;
    cin >> n;
     
    int ch;
    for (int i = 0; i < n; i++) {
        cin >> ch;
        arr.push_back(ch);
    }
 
    for (int i = 2; i < n - 2; i++) {
        if (arr[i] > arr[i - 1] && arr[i] > arr[i - 2]
            && arr[i] > arr[i + 1] && arr[i] > arr[i + 2])
            check(i);
    }
 
 
}
 
int main() {
    int sun = 0;
 
    for (int i = 0; i < 10; i++)
    {
        sun++;
        run();
        cout << "#" << sun << " " <<cnt<< endl;
    }
     
    return 0;
}

'APS > SWEA' 카테고리의 다른 글

1209. [S/W 문제해결 기본] 2일차 - Sum C++  (0) 2021.08.26
1208. [S/W 문제해결 기본] 1일차 - Flatten C++  (0) 2021.08.26
2007. 패턴 마디의 길이  (0) 2021.08.25
3499. 퍼펙트 셔플  (0) 2021.08.25
2001. 파리 퇴치  (0) 2021.08.25

정렬 되어있는 데이터를 검색할 때,for문으로 찾는 것보다 Binary Search로 더 빨리 원하는 값을 찾을 수 있습니다.
(주의: Binary Search와 Binary Search Tree를 헷갈리지마세요!)

 

1. sort 정렬 후 mid 중간값 찾기

2. 배열의 처음인덱스 start, 마지막인덱스 end

3. target이 mid보다 작으면 end를 mid-1/ 크면 start를 mid+1

4. start가 end와 만나거나 넘으면 target없음

#include<iostream>
#include<vector>

using namespace std;

int target;
vector<int>vect = { 1,2,5,33,44,63,34,99 };

int bsearch(int start, int end, int target) {
    while (1) {
        int mid = (start + end) / 2;
        if (vect[mid] == target)return 1;
        if (start > end)return -1;
        if (target > vect[mid]) start = mid + 1;
        else end = mid - 1;
    }
}

int main() {

    cin >> target;
    int ret = bsearch(0, 7, target);
    if (ret == 1) cout << "찾음";
    else cout << "없음";

    return 0;
}

- 배터리양 확인하기

#include<iostream>
#include<vector>

using namespace std;
string power = "####______";

int bsearch(int start, int end)
{
    int Max = -1;
    while (1)
    {
        int mid = (start + end) / 2;
        if (start > end)break;
        if (power[mid] == '#')
        {
            if (Max < mid)Max = mid;
            start = mid + 1;
        }
        else end = mid - 1;
    }
    return Max;
}

int main()
{
    int ret = bsearch(0, power.size() - 1);
    cout << (ret + 1) * 10 << "%";
    return 0;
}

문제에 조건이 명확하지 않음

 

- Test1 : 전체 문자열 비교 (명확하나 문제조건이 부실하여 오히려 정답 안됨)

#include <iostream>
#include <vector>
 
using namespace std;
 
int sun = 0;
 
string st;
int stsize;
 
bool check(string tmp, int len) {
 
    int i = 0;
    while(1) {
        if (i+len >= stsize) break;
        string be = st.substr(i + len, len);
        if (tmp != be)
            return false;
        i += len;
    }
 
    return true;
 
}
 
void run() {
    sun++;
 
    cin >> st;
 
    string tmp;
    stsize = st.size();
    for (int i = 1; i <= stsize; i++) {
        if (stsize % i != 0) continue;
        tmp = st.substr(0, i);
        if (check(tmp, i)==1)
            break;
    }
 
    cout << "#" << sun<<" "<<tmp.length();
 
    cout << endl;
}
 
int main() {
    int t = 0;
 
    cin >> t;
 
    for (int i = 0; i < t; i++) {
        run();
    }
 
    return 0;
}

 

- Test2 : 문자열을 전체 다 확인할 필요 없이 다음문자열과만 비교

#include <iostream>
#include <vector>

using namespace std;

int sun = 0;

string st;
int stsize;

bool check(string tmp, int len) {

    string be = st.substr(len, len);
    if (tmp == be) return true;
    if (tmp != be) return false;
}

void run() {
    sun++;

    cin >> st;

    string tmp;
    stsize = st.size();
    for (int i = 1; i <= 10; i++) {
        tmp = st.substr(0, i);
        if (check(tmp, i)==1)
            break;
    }

    cout << "#" << sun<<" "<<tmp.length();

    cout << endl;
}

int main() {
    int t = 0;

    cin >> t;

    for (int i = 0; i < t; i++) {
        run();
    }

    return 0;
}
#include <iostream>
#include <vector>
 
using namespace std;
 
int sun = 0;
 
void run() {
    sun++;
    int n;
    cin >> n;
    string arr[1000];
 
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
 
    vector<string>result;
    if (n % 2 == 0) {
        int s = n / 2;
        for (int i = 0; i < s; i++) {
            result.push_back(arr[i]);
            result.push_back(arr[s + i]);
        }
    }
     
    else if (n % 2 == 1) {
        int s = n / 2+1;
        for (int i = 0; i < s+1; i++) {
            for (int i = 0; i < s; i++) {
                result.push_back(arr[i]);
                result.push_back(arr[s + i]);
            }
        }
    }
         
    cout << "#" << sun<<" ";
 
    for (int i = 0; i < n; i++) {
        cout << result[i] << " ";
    }
 
    cout << endl;
}
 
int main() {
    int t = 0;
 
    cin >> t;
 
    for (int i = 0; i < t; i++) {
        run();
    }
 
    return 0;
}

'APS > SWEA' 카테고리의 다른 글

1206. [S/W 문제해결 기본] 1일차 - View  (0) 2021.08.26
2007. 패턴 마디의 길이  (0) 2021.08.25
2001. 파리 퇴치  (0) 2021.08.25
1979. 어디에 단어가 들어갈 수 있을까  (0) 2021.08.24
1289. 원재의 메모리 복구하기  (0) 2021.08.24
#include <iostream>

using namespace std;

int sun = 0;

int arr[20][20];

int mmax=0;

int x, y;
void check(int a,int b){


    int sum = 0;
    for (int i = a; i < a+y; i++) {
        for (int j = b; j < b+y; j++) {
            sum += arr[i][j];
        }
    }

    if (mmax < sum) {
        mmax = sum;
    }
}

void run() {
    sun++;
    mmax = 0;
    
    cin >> x >> y;
    
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < x; j++) {
            cin >> arr[i][j];
        }
    }

    for (int i = 0; i < x-(y-1); i++) {
        for (int j = 0; j < x - (y-1); j++) {
            check(i,j);
        }
    }

    cout << "#" << sun << " " << mmax <<"\n";
}

int main() {
    int n = 0;

    cin >> n;

    for (int i = 0; i < n; i++) {
        run();
    }

    return 0;
}

'APS > SWEA' 카테고리의 다른 글

2007. 패턴 마디의 길이  (0) 2021.08.25
3499. 퍼펙트 셔플  (0) 2021.08.25
1979. 어디에 단어가 들어갈 수 있을까  (0) 2021.08.24
1289. 원재의 메모리 복구하기  (0) 2021.08.24
4047. 영준이의 카드 카운팅  (0) 2021.08.24

https://pro.mincoding.co.kr/problem/G5LV31_%EC%88%AB%EC%9E%90%EB%B6%80%EC%B9%A8%EA%B0%9C

 

OnlineJudge

 

pro.mincoding.co.kr

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

int main() {
    int n, m;
    
    cin >> n >> m;

    vector<int>result;

    for(int i=0; i<m; i++){
        n *= 2;
        string tmp=to_string(n);
        reverse(tmp.begin(), tmp.end());
        n = stoi(tmp);
    }

    cout << n;


    return 0;
}

- 자료형별 메모리 크기

 -> 포인터의 메모리크기 8Bytes (32bit에서는 4Bytes)

 -> 구조체의 경우 가장 메모리크기가 큰 자료형 기준으로 공간차지함(padding)

     : struct node{ int x; char b; } -> 4*2=8bytes

+ Recent posts