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

 

1969번: DNA

DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오

www.acmicpc.net

 

이 문제는 brute force 문제이다

 

DNA 염기 { A, C, G, T } 로 구성된 문자열이 N개 주어졌을 때, 각 자리수의 가장 빈도수가 많은 문자만 뽑으면 된다

 

문제에서는 Hamming distance 등 생소한 용어로 혼란을 주지만 문제 자체만 보면 각 자리수의 빈도수가 가장 높은 문자만

 

뽑으면 그것이 전체 DNA sequence 중 가장 차이가 적은 문자열이 된다

 

counting을 위해서 map 자료구조를 이용했고, 사전 순을 맞추기 위해 max 를 검사할 때 사전 순으로 검사하도록 한다

 

 

 

소스코드

 

  1. #include<stdio.h>
  2. #include<vector>
  3. #include<string>
  4. #include<map>
  5. using namespace std;
  6. int n,m;
  7. char buf[55];
  8. char order[4] = { 'A', 'C', 'G', 'T'};
  9.  
  10. int main(){
  11. scanf("%d %d",&n,&m);
  12. vector<string> v;
  13. for(int i=0;i<n;i++){
  14. scanf(" %s", buf);
  15. v.push_back(string(buf));
  16. }
  17. vector< pair<char, int> > ans;
  18. for(int i=0; i<m; i++){
  19. map<char, int> c;
  20. for(int o=0; o<4; o++)
  21. c[order[o]] = 0;
  22. for(int j=0; j<n; j++){
  23. c[v[j][i]] += 1;
  24. }
  25. int max_ = 0, diff = 0;
  26. char d;
  27. for(int o=0; o<4; o++){
  28. diff += c[order[o]];
  29. if(max_ < c[order[o]]){
  30. max_ = c[order[o]];
  31. d = order[o];
  32. }
  33. }
  34. ans.push_back(make_pair(d, diff-max_));
  35. }
  36. int cnt = 0;
  37. for(int i=0;i<ans.size();i++){
  38. printf("%c", ans[i].first);
  39. cnt += ans[i].second;
  40. }
  41. printf("\n%d\n", cnt);
  42. return 0;
  43. }

 

 

 

 

 

'알고리즘 문제풀이' 카테고리의 다른 글

BOJ 14891 톱니바퀴  (0) 2021.06.12
BOJ 14503 로봇 청소기  (0) 2021.06.12
BOJ 1969 DNA  (0) 2021.05.24
BOJ 2529 부등호  (0) 2021.05.19
BOJ 17472 다리만들기 2  (0) 2020.11.24
BOJ 1305 광고  (0) 2020.09.24

API Key를 발급받았으면, 어떤 템플릿으로 메일을 보낼지 미리 만들어 둘 수 있다

 

SendGrid 에서는 `Dynamic Templates` 를 제공한다 

 

 

Email API > Dynamic Templates

 

`Create a Dynamic Template` 를 클릭해 하나 만들어보자

 

필자는 회원가입에서 많이 사용하는 `email confirmation` 을 위한 템플릿을 만들었다

 

 

 

생성한 'email_confirmation' 템플릿

 

Template 은 drag & Drop 으로 image, text, button 등 쉽게 layout 을 구성할 수 있다.

 

가장 중요한 점은 mail 을 보낼 때, 받는 사람에 따라 정보를 다르게 보여줘야 한다 (이름, 메일 등)

 

템플릿에서 {{ 변수명 }} 으로 설정해놓고 나중에 request_body 에 맞게 데이터를 보내면 된다

(자세한 내용은 Handle bar 문서 참조 https://sendgrid.com/docs/for-developers/sending-email/using-handlebars/)

 

subject 는 메일의 제목, preheader 는 미리보기 내용이다

 

필자가 만든 템플릿. (디자인을 못하는게 증명)

 

 

유용한 팁 중 하나는 버튼 URL도 request_body를 통해 동적으로 설정해줄 수 있다

 

장점은 당연한 얘기겠지만, 나중에 end-point url이 변경되거나 할 때, Sendgrid 템플릿 변경하지 않고 코드만 변경하면 되기 때문에 편하다

 

button URL > dynamic 설정 가능

 

 

저장하고 나오면,. 각 템플릿에 version 도 명시할 수 있다

 

request_body에서 버전정보를 넣어주면 해당 템플릿을 사용할 수 있다

 

여기까지 했으면 준비는 다 끝났다

 

SendGrid 는 하루에 약 2000 개의 메일을 무료로 보낼 수 있다

API key를 발급받아 사용하면 각자 사용하는 프로그래밍 언어로 메일을 쉽게 보낼 수 있다

 

가입한 후 Setting > API key 에서 API 키를 발급받아야 한다. `Create API Key` 버튼을 클릭.

 

Settings > API Keys

 

 

적당히 이름을 정하고 해당 API key에 부여할 권한을 선택.

 

Create API Key

 

`Create & View` 버튼을 누르면, 발급된 API Key를 보여주는데, 다시 보여주지 않으니 복사해두자 !

복사해두지 않으면 잃어버림

 

 

 

+ Recent posts