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

 

11536번: 줄 세우기

이름이 증가하는 순으로 나타나면 INCREASING, 감소하는 순이면 DECREASING을 한 줄에 출력한다. 만약 위의 두 경우가 아니라면 NEITHER를 출력한다.

www.acmicpc.net


간단한 문제 ! 

temp 2개를 생성,  오름차순/내림차순  각 정렬을 하고  

입력된 순서와 비교

#include <bits/stdc++.h>
using namespace std;



int n;
vector<string> vec;
vector<string> temp1;
vector<string> temp2;

bool compare(string s1, string s2){
  return s1 > s2;
}

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    string str;
    cin>>str;
    vec.push_back(str);
   }

  for(int i=0; i<n; i++){
    temp1.push_back(vec[i]);
    temp2.push_back(vec[i]);
  }

  sort(temp1.begin(), temp1.end());
  sort(temp2.begin(),temp2.end(),compare);


  if(vec == temp1){
    cout<<"INCREASING"<<'\n';
  }
  else if( vec == temp2){
    cout<<"DECREASING"<<'\n';
  }
  else {
    cout<<"NEITHER"<<'\n';
  }  
  
}


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

[c++] 백준 1149 RGB 거리  (0) 2021.01.05
[c++] 백준 2597 계단오르기  (0) 2021.01.05
[c++] 백준 10825 국영수  (0) 2021.01.04
[c++] 백준 11656 접미사 배열  (0) 2021.01.04
[c++] 백준 1181 단어 정렬  (0) 2021.01.04

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

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net


문제 자체는 쉬웠지만, 조건을 제대로 확인 안해서 조금 헤맸다.

조건마다 감소하는 순서인지, 증가하는 순서인지 제대로 확인하고 풀기 

 

#include <bits/stdc++.h>
using namespace std;

struct student
{
  string name;
  int a;
  int b;
  int c;
  /* data */
};

int n;
vector<student> vec;

bool compare(student s1, student s2){
  if(s1.a == s2.a && s1.b == s2.b && s1.c == s2.c){
    return s1.name < s2.name;
  }
  else if(s1.a == s2.a &&  s1.b == s2.b){
    return s1.c > s2.c;
  }
  else if (s1.a == s2.a ){
    return s1.b < s2.b;
  }
  else{
    return s1.a > s2.a;  
    }


}

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    string name;
    int a,b,c;
    cin>>name>>a>>b>>c;
    vec.push_back({name,a,b,c});
  }
  sort(vec.begin(), vec.end(),compare);

  for(auto&i :vec)
    cout<<i.name<<'\n';
  
}

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

[c++] 백준 2597 계단오르기  (0) 2021.01.05
[c++] 백준 11536 줄 세우기  (0) 2021.01.04
[c++] 백준 11656 접미사 배열  (0) 2021.01.04
[c++] 백준 1181 단어 정렬  (0) 2021.01.04
[c++] 백준 11652 카드  (0) 2021.01.04

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

 

11656번: 접미사 배열

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다.

www.acmicpc.net


string substr 함수 사용 

#include <bits/stdc++.h>
using namespace std;


string str;
vector<string> vec;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>str;

  for(int i=0; i<str.size(); i++)
    vec.push_back(str.substr(i,str.size()));
    
  sort(vec.begin(), vec.end());

  for(auto&i : vec)
    cout<<i<<'\n';
  
}

 아주 간단한 문제! 

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

[c++] 백준 11536 줄 세우기  (0) 2021.01.04
[c++] 백준 10825 국영수  (0) 2021.01.04
[c++] 백준 1181 단어 정렬  (0) 2021.01.04
[c++] 백준 11652 카드  (0) 2021.01.04
[c++] 백준 1431 시리얼 번호  (0) 2021.01.04

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

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 


1431 시리얼 번호 문제와 유사 

주어진 조건대로 비교 함수를 잘 정의하고 중복된 요소만 제거해서 출력하면 끝

erase와 unique는 처음 써봤는데 역시 STL 최고 ^^..

#include <bits/stdc++.h>
using namespace std;

int n;
vector<string> vec;

bool compare(string s1, string s2){
  if(s1.size()== s2.size()){
    return s1<s2;
  }
  return s1.size() < s2.size();

}

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    string str;
    cin>>str;
    vec.push_back(str);
    }

  sort(vec.begin(), vec.end(), compare);
  vec.erase(unique(vec.begin(), vec.end()),vec.end());

  for(auto &i:vec){
    cout<<i<<'\n';
  }
}


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

[c++] 백준 10825 국영수  (0) 2021.01.04
[c++] 백준 11656 접미사 배열  (0) 2021.01.04
[c++] 백준 11652 카드  (0) 2021.01.04
[c++] 백준 1431 시리얼 번호  (0) 2021.01.04
[c++] 백준 11651 좌표 정렬하기2  (0) 2021.01.03

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

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net


정수 범위에 맞춰서 long long type을 쓰는 것이 포인트 

입력 -> 정렬 -> 같은 요소 개수 

#include <bits/stdc++.h>
using namespace std;

int n;
vector<long long> vec;



int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    long long num;
    cin>>num;
    vec.push_back(num);
  }

  sort(vec.begin(), vec.end());
  
  int cnt = 1;
  int max = 0;
  long long card = vec[0];
  
  for(int i=0; i<n; i++){
    if(vec[i] == vec[i+1]) cnt++;
    else { cnt = 1;}

    if(cnt>max){
      max = cnt;
      card = vec[i];
    }
  }

  cout<<card<<'\n';

}

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

[c++] 백준 11656 접미사 배열  (0) 2021.01.04
[c++] 백준 1181 단어 정렬  (0) 2021.01.04
[c++] 백준 1431 시리얼 번호  (0) 2021.01.04
[c++] 백준 11651 좌표 정렬하기2  (0) 2021.01.03
[c++] 백준 11650 좌표 정렬하기  (0) 2021.01.03

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

 

1431번: 시리얼 번호

첫째 줄에 기타의 개수 N이 주어진다. N은 1,000보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루

www.acmicpc.net


 

문제에  설명된 조건대로  비교  함수를 정의하여 정렬

#include <bits/stdc++.h>
using namespace std;

int n;
vector<string> vec;

bool compare(string s1, string s2){
  if(s1.size() != s2.size()){
      return s1.size()< s2.size();
  }
  int a =0;
  for(int i=0; i<s1.size(); i++){
    if(s1[i] -'0'<= 9 && s1[i] -'0' >=0){
      a += s1[i] -'0';
    }
  }
  int b =0;
  for(int i=0; i<s2.size(); i++){
    if(s2[i] -'0' <= 9 && s2[i] -'0' >=0){
       b+= s2[i] -'0';
    }
  }

  if(a != b){
    return a<b;
  }
  else{
    return s1<s2;
  }
}


int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;

  for(int i=0; i<n; i++){
    string str;
    cin>>str;
    vec.push_back(str);
  }

  sort(vec.begin(), vec.end(), compare);
  for(auto &i :vec){
    cout<<i<<"\n";
  }
}

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

[c++] 백준 1181 단어 정렬  (0) 2021.01.04
[c++] 백준 11652 카드  (0) 2021.01.04
[c++] 백준 11651 좌표 정렬하기2  (0) 2021.01.03
[c++] 백준 11650 좌표 정렬하기  (0) 2021.01.03
[c++] 백준 10814 나이순 정렬  (0) 2021.01.03

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

 

11651번: 좌표 정렬하기 2

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net


11650 좌표 정렬하기 문제에서 compare의 조건만 다른 문제

#include <bits/stdc++.h>
using namespace std;


struct point{
  int x;
  int y;
};

bool compare(point i , point j){
  if(i.y==j.y){
    return (i.x<j.x);
  }
  return (i.y<j.y);
}

int n;
vector<point> vec;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    int x,y;
    cin>>x>>y;
    vec.push_back({x,y});
  }

  sort(vec.begin(), vec.end(),compare);
  for( auto&i : vec)
    cout<<i.x<<' '<<i.y<<'\n';
}

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

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net


10814 나이순 정렬 문제와 유사함 stable sort대신 sort 사용, 따로 정렬 기준을 넣어주고 sort

#include <bits/stdc++.h>
using namespace std;


struct point{
  int x;
  int y;
};

bool compare(point i , point j){
  if(i.x==j.x){
    return (i.y<j.y);
  }
  return (i.x<j.x);
}

int n;
vector<point> vec;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    int x,y;
    cin>>x>>y;
    vec.push_back({x,y});
  }

  sort(vec.begin(), vec.end(),compare);
  for( auto&i : vec)
    cout<<i.x<<' '<<i.y<<'\n';
}

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

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

 


Stable_sort 사용 

#include <bits/stdc++.h>
using namespace std;


struct Person{
  int age;
  string name;
};

vector<Person> vec;
int n;

bool compare(Person i, Person j){
  return (i.age<j.age);
}

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    int a;
    string na;
    cin>>a>>na;
    vec.push_back({a,na});
  }

  stable_sort(vec.begin(), vec.end(), compare);

  for(auto&i : vec)
    cout<<i.age<<' '<<i.name<<'\n';
  

}

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

 

6603번: 로또

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

www.acmicpc.net


백트래킹 사용 

#include <bits/stdc++.h>
using namespace std;
 
int n;
vector<int> num;
vector<int> ans;

void func(int start,int count){
    if( count==6){
        for(int i=0; i<6; i++)
            cout<<ans[i]<<" ";
        cout<<'\n';
        return;
    }

    for(int i= start; i<n; i++){
        ans.push_back(num[i]);
        func(i+1, count+1);
        ans.pop_back();
    }
}

int main(void) {
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    while(cin>> n&&n){
        for(int i=0; i<n; i++){
            int temp;
            cin>>temp;
            num.push_back(temp);
        }

        func(0,0);
        num.clear();
        ans.clear();
        cout<<'\n';
    }
 }

2021/03/04 풀이추가

prev_permutation 사용

독일의 로또는 k개 중에서 6개를 뽑아야한다 

그냥 prev_permutation을 사용하는 경우 중복되어 뽑히는 모든 경우의 수가 나오기 때문에

개수를 체크해줄 bool 타입 벡터를 추가함 -> k개중 6개가 뽑히는데 중복된 경우를 제외하려고 

 

#include <bits/stdc++.h>

using namespace std;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  while(1){
    int k;
    cin>>k;
    if(k==0) 
      return 0;
    vector<int> vec;
    vector<bool> check(k);
    for(int i=0; i<k; i++){
      int num;
      cin>>num;
      vec.push_back(num);
    }
    for(int i=0; i<6; i++){
      check[i] = 1;
    }

    do
    {
      for(int i=0; i<k; i++){
        if(check[i]==1)
          cout<<vec[i]<<" ";
      }
      cout<<"\n";
    } while (prev_permutation(check.begin(),check.end()));
    cout<<"\n";
  }
   
   
}

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

[c++] 백준 11650 좌표 정렬하기  (0) 2021.01.03
[c++] 백준 10814 나이순 정렬  (0) 2021.01.03
[c++] 백준 15649 - 15657 N과M (1) - (8)  (0) 2020.12.31
[c++] 백준 7569 토마토 (3차원)  (0) 2020.12.28
[c++] 백준 7576 토마토  (0) 2020.12.28

+ Recent posts