728x90
- 혼자 놀기의 달인
#include <bits/stdc++.h>
using namespace std;
int visited[104], ret;
vector<int> ans, an;
void dfs(int here,vector<int> cards){
if(visited[here]) return;
visited[here]=1;
int temp = cards[here-1];
ans.push_back(temp);
if(!visited[temp]) dfs(temp, cards);
return;
}
int solution(vector<int> cards) {
int ret=1;
for(int i=1;i<=cards.size();i++){
if(visited[i]) continue;
dfs(i,cards);
an.push_back(ans.size()); //크기 저장
while(!ans.empty()) ans.pop_back();
}
//가장 큰 크기 2개 곱해서 답 구하기
sort(an.begin(), an.end(), greater<int>());
if(an.size()==1) return 0;
ret *= an[0];
ret *= an[1];
return ret;
}
처음엔 못 풀었다.. 문제가 너무 길어서 이해하는 것을 포기했다.. 그러지말자.. 꼭 예제까지 이해하고 풀자..(카카오 문제는 원래 길다..)
- 카드 뭉치
#include <bits/stdc++.h>
using namespace std;
int c1, c2;
string solution(vector<string> cards1, vector<string> cards2, vector<string> goal) {
string answer = "";
for(int i=0;i<goal.size();i++){
string s=goal[i];
if(cards1[c1]==s){
c1++;
}
else if(cards2[c2]==s){
c2++;
}
else {
return "No";
}
}
answer="Yes";
return answer;
}
- 두 큐 합 같게 만들기
X
- 둘만의 암호
#include <bits/stdc++.h>
using namespace std;
int alpa[30];
string solution(string s, string skip, int index) {
string answer = "";
fill(alpa, alpa+30, 1);
for(char sk:skip){ //스킵할 문자는 0 표시
alpa[sk-'a']=0;
}
for(char c:s){
int cnt=0;
while(cnt!=index){
if(c=='z'){ //문자 오버플로우 방지
c='a'; cnt++;
}
else {
c++; cnt++;
}
//스킵 문자는 계속 스킵하기
if(alpa[c-'a']==0)
{
while(alpa[c-'a']==0){
if(c=='z') c='a';
else c++;
}
}
}
answer+=c;
}
return answer;
}
- 압축
X
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스: 구명 보트 (0) | 2023.03.18 |
---|---|
프로그래머스: 큰 수 만들기 (0) | 2023.03.18 |
프로그래머스 단어변환 (0) | 2023.03.17 |
프로그래머스: 게임 맵 최단거리 (2) | 2023.03.17 |
프로그래머스:네트워크 (0) | 2023.03.17 |
728x90
- 혼자 놀기의 달인
#include <bits/stdc++.h>
using namespace std;
int visited[104], ret;
vector<int> ans, an;
void dfs(int here,vector<int> cards){
if(visited[here]) return;
visited[here]=1;
int temp = cards[here-1];
ans.push_back(temp);
if(!visited[temp]) dfs(temp, cards);
return;
}
int solution(vector<int> cards) {
int ret=1;
for(int i=1;i<=cards.size();i++){
if(visited[i]) continue;
dfs(i,cards);
an.push_back(ans.size()); //크기 저장
while(!ans.empty()) ans.pop_back();
}
//가장 큰 크기 2개 곱해서 답 구하기
sort(an.begin(), an.end(), greater<int>());
if(an.size()==1) return 0;
ret *= an[0];
ret *= an[1];
return ret;
}
처음엔 못 풀었다.. 문제가 너무 길어서 이해하는 것을 포기했다.. 그러지말자.. 꼭 예제까지 이해하고 풀자..(카카오 문제는 원래 길다..)
- 카드 뭉치
#include <bits/stdc++.h>
using namespace std;
int c1, c2;
string solution(vector<string> cards1, vector<string> cards2, vector<string> goal) {
string answer = "";
for(int i=0;i<goal.size();i++){
string s=goal[i];
if(cards1[c1]==s){
c1++;
}
else if(cards2[c2]==s){
c2++;
}
else {
return "No";
}
}
answer="Yes";
return answer;
}
- 두 큐 합 같게 만들기
X
- 둘만의 암호
#include <bits/stdc++.h>
using namespace std;
int alpa[30];
string solution(string s, string skip, int index) {
string answer = "";
fill(alpa, alpa+30, 1);
for(char sk:skip){ //스킵할 문자는 0 표시
alpa[sk-'a']=0;
}
for(char c:s){
int cnt=0;
while(cnt!=index){
if(c=='z'){ //문자 오버플로우 방지
c='a'; cnt++;
}
else {
c++; cnt++;
}
//스킵 문자는 계속 스킵하기
if(alpa[c-'a']==0)
{
while(alpa[c-'a']==0){
if(c=='z') c='a';
else c++;
}
}
}
answer+=c;
}
return answer;
}
- 압축
X
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스: 구명 보트 (0) | 2023.03.18 |
---|---|
프로그래머스: 큰 수 만들기 (0) | 2023.03.18 |
프로그래머스 단어변환 (0) | 2023.03.17 |
프로그래머스: 게임 맵 최단거리 (2) | 2023.03.17 |
프로그래머스:네트워크 (0) | 2023.03.17 |