10/27 Daily Report

1 minute read

10/27 Daily Report

TIL(Today I Learn)

● 백준 1759 - 암호 만들기 문제 해결

#include <iostream>
#include <vector>
#include <algorithm>
#define MAX 16

using namespace std;

int l, c, cons, vow;
string arr[MAX];
bool visited[MAX] = {0};
int result_num[MAX];

void password(int count){
  if(count==l+1){
    int cons=0, vow=0;
    for(int i=1; i<=l; i++){
      if(arr[result_num[i]]=="a"||arr[result_num[i]]=="e"||arr[result_num[i]]=="i"||arr[result_num[i]]=="o"||arr[result_num[i]]=="u"){
        vow++;
      }
      else{
        cons++;
      }
    }
    if(cons>=2&&vow>=1){
      for(int i=1; i<=l; i++){
        cout << arr[result_num[i]];
      }
      cout << "\n";
    }
  }
  for(int i=1; i<=c; i++){
    if(!visited[i]){
      visited[i] = true;
      result_num[count]=i;
      if(result_num[count-1]<result_num[count]){
        password(count+1);
      }
      visited[i] = false;
    }
  }
}

int main() {
  cin >> l >> c;

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

  sort(arr+1,arr+c+1);

  password(1);
}

오늘 푼 문제의 코드다.
처음에는 결과 값을 vector에 넣을려고 했었는데 vector의 pop_back()이 제대로 동작하지 않아서 고민하다가 '굳이 string vector로 저장할 필요가 있을까?'라는 생각을 했고 vector에 순서를 저장한 뒤 그 값을 주어지는 값의 배열인 arr[MAX]에서 찾는 방식으로 해결했다. 문제를 주어진 그대로 보고 풀려고 하는 것 보다 어떻게 하면 더 편하고 효율적으로 풀 수 있는지 고민해 보는 것도 도움이 되는 것 같다고 느꼈다.

int main()   {
  cin >> l;
  for(int i=0; i<l; i++){
    cin >> arr[i];
  }
  for(int i=0; i<l; i++){
    result.push_back(arr[i]);
  }

  for(int i=0; i<result.size();i++){
    cout <<result[i]<<" ";
  }
  cout<<"\n";

  result.pop_back();

  for(int i=0; i<result.size();i++){
    cout <<result[i]<<" ";
  }
}

그리고 이건 string vector에서 pop_back()이 제대로 동작하는 지 확인 해 보기 위해 새로 코드를 짠 것인데 이 코드에서는 또 잘 작동해서 당황스러웠다.
문제도 해결했고 pop_back()의 사용법도 내가 기억하고 있는 것이 맞으니 그 때 당시에 뭔가 실수가 있는 것이 아니었나 싶다.

Leave a comment