-
[백준 25758] 유전자 조합백준/자료구조 2024. 2. 6. 23:42
자바 연습 겸 자바로 품
자바혐오증 걸릴듯 ㅇㅇ
초반에 그냥 BitSet으로 존재여부만 파악했는데
특정 유전자가 중복으로 존재하면 자기보다 낮지 않아도 발현될 수 있다는걸 뒤늦게 깨달음
AA AA 이렇게 있으면 A가 발현됨
그래서 HashMap 사용해서 품
HashMap이랑 HashSet 사용하는게 핵심이라 자료구조 탭에 넣어둔다
참고로 HashSet 사용한 이유는 중복되지 않는 배열을 막판에 받기 위해서인데
c++이면 그냥 unique하면 되는데 자바는 또 unique를 지원하지 않는다
그래서 HashSet으로 받고 ArrayList로 바꿔서 sort 해주었다.
다 풀고 c++로도 풀어보았다
맨 마지막 코드가 c++ 코드
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); HashSet<Character> ans = new HashSet<>(); HashMap<Character, Integer> first = new HashMap<>(); HashMap<Character, Integer> second = new HashMap<>(); int N = Integer.parseInt(br.readLine()); String[] dna = br.readLine().split(" "); for(int i=0;i<N;i++){ char dna1 = dna[i].charAt(0); char dna2 = dna[i].charAt(1); if(first.containsKey(dna1)){ if(first.get(dna1)==1) first.put(dna1, 2); }else{ first.put(dna1, 1); } if(second.containsKey(dna2)){ if(second.get(dna2)==1) second.put(dna2, 2); }else{ second.put(dna2, 1); } } // 1번째 놈들 검사 for(int i=0;i<N;i++){ char curdna = dna[i].charAt(0); char notavailable = dna[i].charAt(1); for(Character key : second.keySet()){ if(key==notavailable && second.get(key)==1) continue; if(key <= curdna) { ans.add(curdna); break; } } } // 2번째 놈들 검사 for(int i=0;i<N;i++){ char curdna = dna[i].charAt(1); char notavailable = dna[i].charAt(0); for(Character key : first.keySet()){ if(key==notavailable && first.get(key)==1) continue; if(key <= curdna) { ans.add(curdna); break; } } } ArrayList<Character> list = new ArrayList<>(ans); Collections.sort(list); System.out.println(list.size()); for(int i=0;i<list.size();i++){ System.out.print(list.get(i)+" "); } } }
#include <iostream> #include <unordered_map> #include <vector> #include <string> #include <unordered_set> #include <algorithm> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); vector<string> v; unordered_set<char> ans; unordered_map<char, int> first, second; int N; cin >> N; string input; for (int i = 0; i < N; i++) { cin >> input; v.push_back(input); char dna1 = input[0]; char dna2 = input[1]; first[dna1]++; second[dna2]++; } // 1번째 놈 확인 for (int i = 0; i < N; i++) { char target = v[i][0]; char notavailable = v[i][1]; for (auto it = second.begin(); it!=second.end();it++){ if ((*it).first == notavailable && (*it).second == 1) continue; else if((*it).first <= target){ ans.insert(target); break; } } } // 2번째 놈 확인 for (int i = 0; i < N; i++) { char target = v[i][1]; char notavailable = v[i][0]; for (auto it = first.begin(); it != first.end(); it++) { if ((*it).first == notavailable && (*it).second == 1) continue; else if((*it).first <= target){ ans.insert(target); break; } } } vector<char> temp(ans.begin(), ans.end()); sort(temp.begin(), temp.end()); cout << temp.size() << "\n"; for (char ch : temp) cout << ch << " "; return 0; }'백준 > 자료구조' 카테고리의 다른 글
[백준 1181] 단어 정렬 (1) 2025.02.03 [백준 1539] 이진 검색 트리 (2) 2024.02.09 [백준 2002] 추월 (1) 2024.01.10 [백준 2108] 통계학 (0) 2023.10.26 [백준 13414] 수강신청 (0) 2023.03.31