728x90
https://programmers.co.kr/learn/courses/30/lessons/17677?language=cpp#
합집합과 공집합을 구해서 잘 계산하는 구현문제
string 사용에서 애를 좀 먹었다.
transform을 통해 한번에 모든 string 을 대문자나 소문자로 조정가능
toupper 쓰던 tolower쓰던
특수문자가 아닌 두 글자씩 나누어서 맵에 저장하고 값을 증가시켜줌
그 후 str2의 반복문에선 map의 값과 비교하며 이미 나온 문자열의 경우 공집합으로 만들어주는 과정을 거쳤음
그 후 계산
파이썬은 쓰면 쓸수록 너무 매력적인듯;
c++
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <iostream>
using namespace std;
int solution(string str1, string str2) {
double answer = 65536;
unordered_map<string, int> m1;
double gong = 0;
double all = 0;
transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
transform(str2.begin(), str2.end(), str2.begin(), ::tolower);
for (int i = 0; i < (str1.size() - 1); i++) {
if (str1[i] >= 'a' && str1[i] <= 'z' && str1[i + 1] >= 'a' && str1[i + 1] <= 'z') {
string str="";
str = str1[i];
str += str1[i + 1];
all++;
m1[str] +=1;
}
}
for (int i = 0; i < (str2.size() - 1); i++) {
if (str2[i] >= 'a' && str2[i] <= 'z' && str2[i + 1] >= 'a' && str2[i + 1] <= 'z') {
string str="";
str = str2[i];
str += str2[i + 1];
//공집합을 구해야함
if (m1[str] >0) {
gong++;
m1[str]--;
}
else all++;
}
}
if (all != 0) {
answer = int(double(gong / all * answer));
}
return answer;
}
|
cs |
파이썬 코드 졸라간단함..
remove는 가장 먼저 발견한 요소만 지워줌 즉 하나만지워줌
lower()은 다 소문자로만들어주고
조건문 [1:] 해주면 앞에꺼보다 1 뒤에있는것만 받아와줌
앞에것도 자연스럽게 마지막 인덱스까지 진출 안함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
def solution(str1, str2):
answer = 65536
str1 = str1.lower()
str2 = str2.lower()
list1 = []
list2 = []
for s1, s2 in zip(str1, str1[1:]):
str = s1 + s2
if str.isalpha():
list1.append(str)
for s1, s2 in zip(str2, str2[1:]):
str = s1 + s2
if str.isalpha():
list2.append(str)
inter = [list2.remove(x) for x in list1 if x in list2]
uni = len(list1) + len(list2)
if uni != 0:
return int(len(inter) / uni * 65536)
return answer
|
cs |
728x90
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 LV 2] 예상 대진표 파이썬/python (0) | 2021.06.03 |
---|---|
[프로그래머스 LV 2] 메뉴 리뉴얼 파이썬 (0) | 2021.05.19 |
[프로그래머스 LV 2 ] 오픈채팅방 C++/python (0) | 2021.05.19 |
[프로그래머스 LV 1] 음양 더하기 파이썬/python (0) | 2021.05.18 |
[프로그래머스 LV 2] 게임 맵 최단거리 C++ (0) | 2021.05.18 |