Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 20055 컨베이어 벨트 위의 로봇
- 백준 13460 Python
- KotlinInAction
- Kotlin in action 5장
- 코틀린인액션
- 컨베이어 벨트 위의 로봇 Python
- 7장 고급매핑
- Kotlin in action 10장
- 싱글톤 컨테이너
- 스프링 핵심 원리 이해
- 스프링 핵심 원리 - 기본편
- 20055
- Kotlin in action 3장
- Kotlin in action 6장
- 고급매핑
- spring
- kotlin in action 정리
- 스프링 핵심 원리
- Kotlin
- 자바 ORM 표준 JPA 프로그래밍 7장
- Kotlin In Action
- Python
- 백준 20055 컨베이어 벨트 위의 로봇
- 13460 구슬탈출 2
- 코틀린
- 객체 지향 설계와 스프링
- 기능개발 python
- 백준
- 코틸린인액션
- 스프링 컨테이너와 스프링 빈
Archives
- Today
- Total
기록하는 습관
[프로그래머스] 서머코딩/윈터코딩(~2018) - 스킬트리 본문
* 잘못된 풀이
처음에 문제 이해를 잘 못 해서 30분을 날렸다..
분명 마지막 케이스로 BD만 있으면 안되는건데(무조건 c가 선행되어야 함) 계속 연속성만 판단해서 왜 안되나.. 고민하고.. 프린트 해보면서 알게 되었다. 내 잘못이 무엇인지.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string skill, vector<string> skill_trees) {
int answer = 0;
string str1;
int b, tmp;
vector<int> v1;
for(int i=0; i<skill_trees.size(); i++){
b = 0;
for(int j=0; j<skill.size(); j++){
str1 = skill_trees[i];
tmp = str1.find(skill[j]);
cout << tmp;
if(tmp<0 || tmp>=26) continue;
else v1.push_back(tmp);
}
cout << endl;
for(auto iter:v1){
cout << iter;
}
cout << endl;
for(int j=0; j<v1.size(); j++){
if(j!=v1.size()-1 && v1[j]>v1[j+1]){
b=1;
break;
}
}
v1.clear();
if(b==0)
answer++;
}
return answer;
}
그래서 반대로 생각해보았다.
(알고리즘)
1. skill에 있는 문자를 skill_trees에서 찾았는데, 반대로 skill_trees에 있는 문자를 skill에서 찾기.
2. check 값으로 순차대로 스킬이 진행되는지 확인하기
(1) find 한 값이 check와 일치하지 않으면 순차대로 스킬이 진행되지 않았단 의미이므로
불가능한 스킬임을 알리는 flag를 0으로 설정 후 break.
(2) find 한 값이 0보다 작고 25보다 크다면 문자열에 포함되지 않았단 의미이므로 continue.
(3) 그 외는 check++
3. flag가 1이면 answer++
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string skill, vector<string> skill_trees) {
int answer = 0;
int flag, check;
string str1;
for(int i = 0; i < skill_trees.size(); i++){
check = 0;
flag = 1;
str1 = skill_trees[i];
for(int j = 0; j < str1.size(); j++){
int tmp = skill.find(str1[j]);
if(tmp < 0 || tmp > 25){
continue;
}
else if(tmp != check){
flag = 0;
break;
}
else{
check++;
}
}
if(flag){
answer++;
}
}
return answer;
}
'알고리즘 > [문제풀이] 프로그래머스' 카테고리의 다른 글
[프로그래머스] 스택/큐 - 주식가격 (0) | 2020.03.10 |
---|---|
[프로그래머스] 연습문제 - 124 나라 (0) | 2020.03.09 |
[프로그래머스] 스택/큐 - 기능개발 (0) | 2020.03.07 |
[프로그래머스] 연습문제 - 같은 숫자는 싫어 (0) | 2020.03.06 |
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT - [1차] 비밀지도 (0) | 2020.03.04 |
Comments