swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=1&problemLevel=2&contestProbId=AV5QLkdKAz4DFAUq&categoryId=AV5QLkdKAz4DFAUq&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=CCPP&select-1=2&pageSize=10&pageIndex=1

 

SW Expert Academy

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

swexpertacademy.com


D2 문제만 기록하려 했지만,, 

접근 방법은 각 월의 일수를 배열로 저장해두고 입력을 string 타입으로 받았다.

그리고 각 자리수에 맞게 string으로 년/월/일을 입력받고 

월과 일을 stoi 을 사용하여 문자열-> 정수 로 변환하고 각 조건을 넣어주었다.

월이 1~12 사이이며, 월의 일수가 각 월의 일수를 넘지 않고, 0이 아닐 때만  조건대로 출력 

그 외에는 모두 -1을 출력하도록 구성하였다.  코드가 조금 지저분 한 기분,,,,,,,, 

 

#include <bits/stdc++.h>

using namespace std;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin>>t;
  int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  for(int i=1; i<=t; i++){
    string str ="";
    cin>>str;
    string year ="";
    string mon = "";
    string day ="";
    for(int j=0; j<4; j++){
       year += str[j];
    }
    for(int j=4; j<6; j++){
      int idx = j+2;
      mon +=str[j];
      day +=str[idx];
    }
    int m = stoi(mon);
    int d = stoi(day);

    if(m>12 || m<1) cout<<"#"<<i<<" "<<-1<<"\n";    
    else{
      if(d>days[m]|| d==0) cout<<"#"<<i<<" "<<-1<<"\n";        
      else{
        cout<<"#"<<i<<" "<<year<<"/"<<mon<<"/"<<day<<"\n";        
      }
    }
  }
  
}

 

 

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=1&problemLevel=2&contestProbId=AV18-stqI8oCFAZN&categoryId=AV18-stqI8oCFAZN&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=CCPP&select-1=2&pageSize=10&pageIndex=5

 

SW Expert Academy

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

swexpertacademy.com


돌이 가장 0에 가깝게 떨어진 곳과 0 사이의 거리 차이와 그렇게 던진 사람이 몇 명인지를 출력해야한다.

0에서 각 사람이 돌을 던졌을 때 돌이 떨어진 위치를 뺀 절대 값을 벡터에 넣어주며 정렬을 해준다.

내림 차순으로 정렬을 하며 가장 작은 값 (벡터 맨 앞) 이 또 벡터상에 존재하는 경우 인원의 수를 늘려주며 세어준다. 

 

#include <bits/stdc++.h>

using namespace std;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin>>t;
  for(int i=1; i<=t; i++){
    int n;
    cin>>n;
    vector<int> vec;
    int cnt = 1;
    for(int j=0; j<n; j++){
      int num;
      cin>>num;
      vec.push_back(abs(0-num));
    }
    sort(vec.begin(),vec.end());
    for(int j=1; j<=vec.size();j++){
      if(vec[0]==vec[j]) cnt++;
    }
    cout<<"#"<<i<<" "<<vec[0]<<" "<<cnt<<"\n";
  }
  
}

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

[c++] 2056. 연월일 달력  (0) 2021.02.24
[c++] 1288. 새로운 불면증 치료법  (0) 2021.02.19
[c++] 1926. 간단한 369게임  (0) 2021.02.19
[c++] 1945. 간단한 소인수분해  (0) 2021.02.19
[c++] 1946. 간단한 압축 풀기  (0) 2021.02.19

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV18_yw6I9MCFAZN&categoryId=AV18_yw6I9MCFAZN&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=CCPP&select-1=2&pageSize=10&pageIndex=3

 

SW Expert Academy

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

swexpertacademy.com


 

접근 방법은 

1. 입력된 숫자를 문자열로 변환하여 각 자리 마다 나온 숫자의 개수를 세어 배열에 저장해준다.

2. 만약 숫자를 저장해둔 배열(0~9숫자의 등장 횟수) 중에 요소 값이 0을 넘는 요소의 개수가 10개라면  (=0~9까지 모든 수가 등장함) while문을 빠져나간다.

3. 아니면 K++번째 양을 셀 수 있도록 계속 갱신해준다.

4. 출력은 K번째의 K가 아닌 0~9까지를 채운 K번째의 값 자체를 출력해줘야한다. 

 

   

#include <bits/stdc++.h>

using namespace std;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin>>t;
  for(int i=1; i<=t; i++){
    int arr[10]={0,};
    int k = 1;
    int n; cin>>n;
    string str = to_string(n);
    while(1){
      for(int j=0; j<str.size(); j++){
        int num = str[j]-'0';
        arr[num]++;
      }        
      int cnt = 0;
      for(int j=0; j<10; j++){
        if(arr[j]>0) cnt++;
      }
      if(cnt==10) break;
      k++;
      str = to_string(n*k);
    }
    cout<<"#"<<i<<" "<<str<<"\n";
  }
}

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

[c++] 2056. 연월일 달력  (0) 2021.02.24
[c++] 1285. 아름이의 돌 던지기  (1) 2021.02.23
[c++] 1926. 간단한 369게임  (0) 2021.02.19
[c++] 1945. 간단한 소인수분해  (0) 2021.02.19
[c++] 1946. 간단한 압축 풀기  (0) 2021.02.19

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PTeo6AHUDFAUq&categoryId=AV5PTeo6AHUDFAUq&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=CCPP&select-1=2&pageSize=10&pageIndex=1

 

SW Expert Academy

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

swexpertacademy.com


369 규칙에 따라 1부터 N까지의 숫자중에 3/6/9가 들어간 요소의 위치에 '-'을 출력해준다. 

1부터 ~ N까지의 숫자를 하나씩 문자열 타입으로 받으며 문자열 길이만큼 각 자리의 수에 3/6/9중 하나라도 들어가 있는 경우의 개수를 세어준다.  그리고 그 개수만큼 '-'을 출력해주고, 없는 경우엔 그냥 그 숫자를 출력해준다. 

 

#include <bits/stdc++.h>

using namespace std;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin>>n;
  for(int i=1; i<=n; i++){
    string str = to_string(i);
    int cnt =0;
    for(int j=0; j<str.size(); j++){
      int num = str[j]-'0';
      if(num==3||num==6||num==9)cnt++;
    }
    if(cnt==0) cout<<i<<" ";
    else{
      for(int j=0; j<cnt; j++){
        cout<<"-";
      }
      cout<<" ";
    }
  }
}

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5Pl0Q6ANQDFAUq&categoryId=AV5Pl0Q6ANQDFAUq&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=CCPP&select-1=2&pageSize=10&pageIndex=2

 

SW Expert Academy

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

swexpertacademy.com


N=2^a x 3^b x 5^c x 7^d x 11^e  에 따라 숫자를 따로 배열에 넣어줬다. 

그리고 for문을 돌며 주어진 숫자가 각 요소로 나누어 떨어질 때 까지의 연산 횟수를 따로 각 배열에 넣어줬다. 

 

그 다음 차례대로 출력해주면 끝 

 

#include <bits/stdc++.h>

using namespace std;


int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin>>t;
  int number[5]={2,3,5,7,11};
  for(int i=1; i<=t; i++){
    int num; cin>>num;
    int arr[5]={0,};
    for(int j=0; j<5; j++){
      while(num%number[j]==0){
        arr[j]++;
        num/=number[j];
      }
    }
    cout<<"#"<<i<<" ";
    for(int j=0; j<5;j++){
      cout<<arr[j]<<" ";
    }
    cout<<"\n";   
  }
}

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

[c++] 1288. 새로운 불면증 치료법  (0) 2021.02.19
[c++] 1926. 간단한 369게임  (0) 2021.02.19
[c++] 1946. 간단한 압축 풀기  (0) 2021.02.19
[c++] 1983. 조교의 성적 매기기  (0) 2021.02.18
[c++] 1284. 수도 요금 경쟁  (0) 2021.02.18

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PmkDKAOMDFAUq&categoryId=AV5PmkDKAOMDFAUq&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=CCPP&select-1=2&pageSize=10&pageIndex=2

 

SW Expert Academy

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

swexpertacademy.com


출력을 10개 단위로 해야한다. 처음엔 입력된 문자와 그 개수만큼 따로 string에 넣어주고 10개씩 끊어서 출력하는 식으로 생각했지만 굳이 그럴 필요 없을거 같아서 수정했다.

그냥 바로 주어진 개수만큼 for문을 돌면서 10개 단위일 때만 라인 변경을 해주고 그 외에는 그대로 주어진 문자열 개수만큼 출력해주면 된다. 

#include <bits/stdc++.h>

using namespace std;


int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin>>t;
  for(int i=1; i<=t; i++){
    cout<<"#"<<i;
    int n; cin>>n;
    int cnt = 0;
    for(int j=0; j<n; j++){
      char ch;
      int num;
      cin>>ch>>num;
      for(int k=0; k<num; k++){
        if(cnt%10==0){
          cout<<"\n";
        }
        cout<<ch;
        cnt++;        
      }
    }
    cout<<"\n";   
  }

}

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

[c++] 1926. 간단한 369게임  (0) 2021.02.19
[c++] 1945. 간단한 소인수분해  (0) 2021.02.19
[c++] 1983. 조교의 성적 매기기  (0) 2021.02.18
[c++] 1284. 수도 요금 경쟁  (0) 2021.02.18
[c++] 1948. 날짜 계산기  (2) 2021.02.18

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PwGK6AcIDFAUq&categoryId=AV5PwGK6AcIDFAUq&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=CCPP&select-1=2&pageSize=10&pageIndex=2

 

SW Expert Academy

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

swexpertacademy.com


 

k번째로 입력된 점수의 학점을 출력하는 것이 목표였기 때문에

 

1. 처음 접근법은 pair<double , int> 형으로 선언하여 입력된 순서와 각 점수를 넣고  double 기준으로 (점수)  오름차순으로 정렬될 compare 함수를 따로 선언하여 정렬해주고, 찾고자 하는 k번째의 점수와 일치하는 인덱스를 찾아 그 인덱스 위치의 점수를 출력하고자 했다. 문제를 꼼꼼히 안읽어서 그런지  

 

"예를 들어, N 명의 학생이 있을 경우 N/10 명의 학생들에게 동일한 평점을 부여할 수 있다."  라는 부분을 놓쳐서 그런지 계속 오답이 나왔다 ㅠㅠ 그리고 코드가 너무 지저분 한거 같아서 다른 방법으로 접근했다.

 

2. 1번처럼 따로 오름차순 비교 함수를 구현하기 보다는 애초에 grade를 뒤로 저장해두어 기본 내림차순 정렬을 사용하기로 했다.  그리고 따로 pair로 입력되는 순서를 각각 저장할 필요 없이 차례대로 입력되는 것이기 때문에 k번째 점수를 따로 저장해 두고 for문을 통해 k번째의 값과 같은 인덱스를 찾아서 반환해주었다.

위에 나온 표현 처럼 N/10명의 학생들에게 동일한 평점을 부여할 수 있다는 조건에 맞게 k번째의 인덱스에 *10을 곱하고 N을 나눈 위치의 등급을 출력해주었다.!!!!!!!

 

 

 

#include <bits/stdc++.h>

using namespace std;


int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin>>t;
  int arr[100]={0,};
  string grade[10] = {"D0","C-","C0","C+","B-","B0","B+","A-","A0","A+"};
  for(int i=1; i<=t; i++){
    int n; cin>>n;
    int k; cin>>k;
    for(int j=0; j<n; j++){
      int m,f,p;
      cin>>m>>f>>p;
      arr[j] = m*35 + f*45 + p*20;
    }
    int kscore = arr[k-1];
    int kidx  = 0;
    sort(arr,arr+n);
    for(int j=0; j<n; j++){
      if(kscore == arr[j]){
        kidx = j;
        break;
      }
    }
    cout<<"#"<<i<<" "<<grade[(kidx*10)/n]<<"\n";  
  }
}

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

[c++] 1945. 간단한 소인수분해  (0) 2021.02.19
[c++] 1946. 간단한 압축 풀기  (0) 2021.02.19
[c++] 1284. 수도 요금 경쟁  (0) 2021.02.18
[c++] 1948. 날짜 계산기  (2) 2021.02.18
[c++] 1959. 두 개의 숫자열  (0) 2021.02.18

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV189xUaI8UCFAZN&categoryId=AV189xUaI8UCFAZN&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=CCPP&select-1=2&pageSize=10&pageIndex=2

 

SW Expert Academy

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

swexpertacademy.com


주어진 조건대로 입력을 받고, 각 조건에 따라 최소 요금을 갱신해준다.

초기에 1L당 P원으로 계산한 비용을 넣어두고, W가 R보다 작거나 같을 때,  아닐때 나눠서 값을 구하고 

최소 값을 갱신한다.  주어진 조건대로 진행하면 어렵지 않은 문제 

#include <bits/stdc++.h>

using namespace std;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin>>t;
  for(int i=1; i<=t; i++){
    int p,q,r,s,w;
    cin>>p>>q>>r>>s>>w;
    int ans = w*p;
    if(w<=r){
      ans = min(ans,q);
    }else{
      int n = q + (w-r)*s;
      ans = min(ans,n);
    }
    cout<<"#"<<i<<" "<<ans<<"\n";
  }
}

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

[c++] 1946. 간단한 압축 풀기  (0) 2021.02.19
[c++] 1983. 조교의 성적 매기기  (0) 2021.02.18
[c++] 1948. 날짜 계산기  (2) 2021.02.18
[c++] 1959. 두 개의 숫자열  (0) 2021.02.18
[c++] 1976. 시각 덧셈  (0) 2021.02.18

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PnnU6AOsDFAUq&categoryId=AV5PnnU6AOsDFAUq&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=CCPP&select-1=2&pageSize=10&pageIndex=3

 

SW Expert Academy

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

swexpertacademy.com


배열에 각 달의 일수를 넣어서 저장해둔다. [1월 ~ 12월]

각 조건를 나누어 일수를 구해주기 ( 뒤에 입력되는 날짜가 무조건 크다는 조건이 있다  m1/d1 < m2/d2)

 

1. 입력된 월이 같은경우 느린 날짜 - 이른 날짜 +1 

2. 다른 경우 입력된 월 사이에 있는 각 월들의 일수와 입력된 m1의 일수 (전체 -d1) 과 d2 + 1 모두 더해준다. 

(이때 배열에 저장된 요소의 인덱스가 0부터이기 때문에 인덱스 제대로 체크하기)

 

각 달의 일수를 넣어둔 배열의 인덱스만 유의해서 더해주면 무리 없이 풀 수 있다. 

#include <bits/stdc++.h>

using namespace std;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin>>t;
  int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  for(int i=1; i<=t; i++){
    int m1,d1,m2,d2;
    cin>>m1>>d1>>m2>>d2;
    int day = 0;
    if(m1==m2){
      day = d2-d1+1;
    }else{
      for(int j=m1; j<m2-1; j++){
        day+=days[j];
      }
      int a = days[m1-1]-d1;
      day += (a+d2+1);
    }
    cout<<"#"<<i<<" "<<day<<"\n";
  }
}

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

[c++] 1983. 조교의 성적 매기기  (0) 2021.02.18
[c++] 1284. 수도 요금 경쟁  (0) 2021.02.18
[c++] 1959. 두 개의 숫자열  (0) 2021.02.18
[c++] 1976. 시각 덧셈  (0) 2021.02.18
[c++]1986. 지그재그 숫자  (0) 2021.02.18

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PpoFaAS4DFAUq&categoryId=AV5PpoFaAS4DFAUq&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=CCPP&select-1=2&pageSize=10&pageIndex=3

 

SW Expert Academy

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

swexpertacademy.com


문제를 보고 생각한 아이디어는 길이가 긴 문자열을 두고 짧은 문자열을 차례대로 이동시키며 곱한 요소의 합을 계속 누적해주며 최댓값을 리턴해주는 방식을 생각했다.

 

1. 두 숫자열을 입력받음

2. 둘 중 길이가 긴 것을 구분하여 요소의 곱의 합을 구해줌

 

- 0부터 시작하여 두 길이의 차이 만큼 까지 길이가 짧은 숫자열을 이동하며 곱의 합을 구할 수 있다.

 

A (1,5,3) B(3,6,-1,5,4) 일 때, B의 길이 5 > A 길이 3 

 

ex) tmp+= b[k+j]*a[k]  누적 합 

m-n = 5-3 = 2 

j = 0  일때, (A와 B의 시작 인덱스가 일치)

tmp = b[0]*a[0] + b[1]*a[1] +b[2]*a[2]

 

j=1 일때 (A가 한 칸 이동)

tmp = b[1]*a[0] + b[2]*a[1] + b[3]*a[2]

 

j=2 일때

tmp =b[2]*a[0] + b[3]*a[1] + b[4]*a[2];

 

j를 하나씩 늘려가며 tmp의 값이 가장 큰 값을 변수 sum에 저장해 두며 계속 갱신해준다. 

 

 

인덱스를 제대로 설정해주는 것이 포인트

 

#include <bits/stdc++.h>

using namespace std;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin>>t;
  for(int i=1; i<=t; i++){
   int n,m;
   cin>>n>>m;
   vector<int> a;
   vector<int> b;
   for(int j=0; j<n; j++){
     int num;
     cin>>num;
     a.push_back(num);
   }
   for(int j=0; j<m; j++){
     int num;
     cin>>num;
     b.push_back(num);
   }
   int sum =0;

   if(m>n){
     for(int j=0; j<=m-n; j++){
       int tmp =0; 
       for(int k=0; k<n; k++){
         tmp +=b[k+j]*a[k];       
       }
       sum = max(sum,tmp);      
     }
   }   
   else{
     for(int j=0; j<=n-m; j++){
       int tmp =0;
       for(int k=0; k<m; k++){
         tmp +=a[k+j]*b[k];
       }
       sum = max(sum,tmp);
     }
   }   
   cout<<"#"<<i<<" "<<sum<<"\n";
  }
}

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

[c++] 1284. 수도 요금 경쟁  (0) 2021.02.18
[c++] 1948. 날짜 계산기  (2) 2021.02.18
[c++] 1976. 시각 덧셈  (0) 2021.02.18
[c++]1986. 지그재그 숫자  (0) 2021.02.18
[c++] 1970.쉬운 거스름돈  (0) 2021.02.18

+ Recent posts