diff --git a/oesnuj/README.md b/oesnuj/README.md index 8b58e8a..5e5ddb8 100644 --- a/oesnuj/README.md +++ b/oesnuj/README.md @@ -5,4 +5,7 @@ | 1차시 | 2024.03.26 | 스택 | [후위표기식2](https://www.acmicpc.net/problem/1935) | [#4](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/4) | | 2차시 | 2024.03.29 | 연결리스트 | [에디터](https://www.acmicpc.net/problem/1406) | [#8](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/8) | | 3차시 | 2024.04.02 | 덱 | [카드 놓기](https://www.acmicpc.net/problem/18115) | [#11](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/11) | +| 4차시 | 2024.04.06 | 스택 | [옥상 정원 꾸미기](https://www.acmicpc.net/problem/6198) | [#14](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/14) | +| 5차시 | 2024.04.13 | 이분탐색 | [듣보잡](https://www.acmicpc.net/problem/1764) | [#20](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/20) | +| 6차시 | 2024.05.06 | 기하학 | [정사각형](https://www.acmicpc.net/problem/1485) | [#22](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/22) | --- diff --git "a/oesnuj/\352\270\260\355\225\230/1485.cpp" "b/oesnuj/\352\270\260\355\225\230/1485.cpp" new file mode 100644 index 0000000..b795e78 --- /dev/null +++ "b/oesnuj/\352\270\260\355\225\230/1485.cpp" @@ -0,0 +1,53 @@ +#include +#include +#include +#include +using namespace std; + +struct Point +{ + int x, y; +}; + +int calcDistance(Point a, Point b) +{ + return pow(a.x - b.x, 2) + pow(a.y - b.y, 2); +} + +bool compareInfo(Point &a, Point &b) +{ + if(a.x == b.x) + return a.y < b.y; + return a.x < b.x; +} + +int main() { + ios::sync_with_stdio(false); + cin.tie(NULL); + + int n; + cin >> n; + + while (n--) + { + vector v(4); + for (int i = 0; i < 4; i++) { + cin >> v[i].x >> v[i].y; + } + sort(v.begin(), v.end(),compareInfo); + //2 3 + //0 1 + int s1 = calcDistance(v[0], v[1]); //선분 + int s2 = calcDistance(v[0], v[2]); + int s3 = calcDistance(v[1], v[3]); + int s4 = calcDistance(v[2], v[3]); + + int dia1 = calcDistance(v[0], v[3]); //대각선 + int dia2 = calcDistance(v[1], v[2]); + if (s1 == s2 && s2 == s3 && s3 == s4 && dia1 == dia2) //네변의 길이가 같고 대각선의 길이가 같다. + cout << 1 << '\n'; + else + cout << 0 << '\n'; + } + return 0; +} \ No newline at end of file diff --git "a/oesnuj/\354\212\244\355\203\235/6198.cpp" "b/oesnuj/\354\212\244\355\203\235/6198.cpp" new file mode 100644 index 0000000..e7cca65 --- /dev/null +++ "b/oesnuj/\354\212\244\355\203\235/6198.cpp" @@ -0,0 +1,44 @@ +#include +#include + +using namespace std; + +int main() { + ios_base::sync_with_stdio(false); + cin.tie(NULL); + + int n; + cin >> n; //빌딩 개수 입력 + + vector v(n); //빌딩 높이를 받을 벡터 선언 + vector s; //빌딩 높이들을 적절하게 넣을 스택 선언 + for (auto& i : v) + cin >> i; //각 빌딩 높이 입력 + + long long int count = 0; //count가 int형을 넘어서기에 long long int type으로 둠 + for (const auto& height : v) // 모든 빌딩 높이를 하나씩 순회한다. + { + while (true) + { + if (s.empty()) //스택이 비었다면 현재 빌딩 높이 스택에 push + { + s.push_back(height); + break; + } + if (height < s.back()) //현재 빌딩 높이가 스택의 top보다 높은 빌딩이라면(볼 수 있는 빌딩이라면) + { + count += s.size(); + //스택에는 현재 빌딩보다 높은 빌딩 밖에 없으니 스택의 크기 = 현재 빌딩을 볼 수 있는 빌딩 수 + s.push_back(height); + break; + } + s.pop_back(); //현재 빌딩이 스택의 top보다 높다면(어짜피 나를 볼 수 없는 빌딩이니) 전부 pop + //스택이 비거나 현재 빌딩보다 높은 top이 나올때까지 pop한다. + // 언제까지 pop 할까? + //case 1. 스택이 비면 나를 볼 수 있는 빌딩은 없다는 뜻이니 스택에 push + //case 2. 나보다 높은 빌딩이 나온다면 그때 스택의 크기 = 나를 볼 수 있는 빌딩 수 를 count에 추가 + } + } + cout << count; + return 0; +} \ No newline at end of file diff --git "a/oesnuj/\354\235\264\353\266\204\355\203\220\354\203\211/1764.cpp" "b/oesnuj/\354\235\264\353\266\204\355\203\220\354\203\211/1764.cpp" new file mode 100644 index 0000000..370a4f5 --- /dev/null +++ "b/oesnuj/\354\235\264\353\266\204\355\203\220\354\203\211/1764.cpp" @@ -0,0 +1,53 @@ +#include +#include +#include +#include +using namespace std; + + +bool binarySearch(vector &v, string str) //이분탐색 +{ + int left = 0; + int right = v.size() - 1; + while (left <= right) + { + int middle = (left + right) / 2; + if (str > v[middle]) + left = middle + 1; + else if (str < v[middle]) + right = middle - 1; + else + return true; + + } + return false; +} + + +int main() +{ + ios_base::sync_with_stdio(false); cin.tie(NULL); + int n, m; + cin >> n >> m; + vector v(n); //듣도 못한 사람 입력 + for (auto& i : v){ + cin >> i; + } + sort(v.begin(), v.end()); //이분 탐색을 위해 정렬 + vector result; + for (int i = 0; i < m; i++) + { + string word; + cin >> word; //보도 못한 사람 입력 + if (binarySearch(v, word)){ //보도 못한 사람이 듣도 보다 못한 사람에도 포함되면 + result.push_back(word); + } + } + sort(result.begin(), result.end()); //마지막 사전순 정렬을 위해 정렬 + + cout << result.size() << "\n"; + for (const auto& word : result) { + cout << word << "\n"; + } + return 0; +} \ No newline at end of file