업무 중 다른 팀이 개발한 프로젝트를 라이브러리로 가져와 사용할 일이 있었다. 메서드를 사용하던 와중에 처음 보는 컴파일 에러를 발견했다.Suspend function 'suspend fun test()' can only be called from a coroutine or another suspend function. 호출한 메서드가 suspend 함수이기 때문에 코루틴이나 다른 suspend 함수 내에서만 호출 가능하다는 문구이다. suspend 함수란?코루틴에서 함수를 실행할 때 도중에 멈출 수 있음을 표시하기 위해 사용한다. 함수가 실행 중 멈추는 경우에 스레드를 점유하며 성능이 저하되는 현상을 방지하기 위해, suspend 함수에서는 함수가 멈춰있는 동안 해당 스레드를 다른 코루틴 프로세스가 점..
클래스 프로퍼티 val을 사용해 프로퍼티를 선언하면 getter를 무조건 포함한다.var을 사용해 프로퍼티를 선언하면 gettter와 setter를 포함한다.class Car(val name: String, var position: Int = 0) 이 예제에서 name은 프로퍼티, 필드, getter, 생성자 파라미터의 역할을 한다. position을 캡슐화하기 위해 아래와 같이 setter를 private로 바꾼다.class Car(val name: String, var position: Int = 0) { var position: Int = position private set} 상수 사용하기private const val DEFAULT_POSITION: Int = 0class Car(va..
https://www.acmicpc.net/problem/12869 12869번: 뮤탈리스크 1, 3, 2 순서대로 공격을 하면, 남은 체력은 (12-9, 10-1, 4-3) = (3, 9, 1)이다. 2, 1, 3 순서대로 공격을 하면, 남은 체력은 (0, 0, 0)이다. www.acmicpc.net 풀이 과정 scv는 최대 3개가 있을 수 있고, scv의 체력은 최대 60이다. 따라서 각 scv의 체력의 조합은 61의 3승이다. 약 20만의 경우의 수가 있으므로, 전부 탐색해도 큰 문제가 없이 풀 수 있다. D[a][b][c] = 체력의 조합이 (a, b, c) 일 때 모두 파괴하는 최소 공격 횟수 총 세 가지 SCV에 대해서 체력을 감소시킬 때는 3!의 경우의 수가 있으므로, 아래와 같이 점화식을 ..
https://www.acmicpc.net/problem/1495 1495번: 기타리스트 첫째 줄에 N, S, M이 주어진다. (1 ≤ N ≤ 50, 1 ≤ M ≤ 1,000, 0 ≤ S ≤ M) 둘째 줄에는 각 곡이 시작하기 전에 줄 수 있는 볼륨의 차이가 주어진다. 이 값은 1보다 크거나 같고, M보다 작거나 같다. www.acmicpc.net 마지막곡을 연주할 때 k인 볼륨을 설정하는 것이 가능한지 ? 를 기준으로 문제를 풀 수 있게 다이나믹 프로그래밍 알고리즘을 적용해보았다. dp(n, k) = max(sol(n-1, k - v[n]),sol(n-1, k+v[n])) 코드는 위와 같다. 둘 중에 하나라도 가능하면 dp[n][k], 즉 k 크기의 볼륨으로 n번째 곡을 연주할 수 있으므로 첫 번째 곡..
스택(stack) #include // 스택 클래스 정의 class Stack { private: static const int MAX_SIZE = 100; // 스택의 최대 크기 int arr[MAX_SIZE]; // 스택을 저장할 배열 int top; // 스택의 가장 위에 있는 요소의 인덱스 public: Stack() : top(-1) {} // 생성자, 스택 초기화 // 스택이 비어있는지 확인 bool isEmpty() { return (top == -1); } // 스택이 가득 찼는지 확인 bool isFull() { return (top == MAX_SIZE - 1); } // 스택에 요소 추가 void push(int value) { if (isFull()) { std::cout
이분 탐색으로 lower_bound 구현하기 lower_bound는 어떤 수보다 크거나 같은 수가 처음 나오는 위치를 의미한다. 반대로, upper_bound는 어떤 수보다 큰 수가 처음 나오는 위치를 의미한다. vector v = {0, 1, 2, 3, 4, 5}; int target = 3; int left = 0, right = v.size() -1 ; while(left
String 부분 문자열 substr https://modoocode.com/235 C++ 레퍼런스 - string 의 substr 함수 modoocode.com basic_string substr(size_type pos = 0, size_type count = npos) const; 첫 번째 인자는 시작 위치, 두 번째 인자는 부분 문자열의 길이를 의미한다. 인자를 하나만 넣게 되면, 자동으로 문자열의 마지막 위치까지 잘라서 리턴하게 된다. 소문자를 대문자로, 대문자를 소문자로 ! Transform 함수 https://artist-developer.tistory.com/28 [C++] transform 함수 안녕하세요. 개발자 김모씨입니다. C, C++ 탭을 새로 만들었습니다~~~~~~ 여기에는 실무..
자료구조를 사용하지 않지만, 수학적 계산을 이용해 구하는 간단하고 다양한 예제들을 정리하려 한다. 양수, 음수에 대한 올림/내림/반올림 https://blockdmask.tistory.com/112 [C언어/C++] 올림, 내림, 반올림 (floor, ceil) 함수 안녕하세요 BlockDMask 입니다. 오늘은 올림, 내림 을 할수있는 ceil, floor 함수에 대해서 알아보고. floor 함수를 통해서 반올림을 하는 것 까지 보도록 하겠습니다. C의 함수들이 C++에 호환이 되어서 C blockdmask.tistory.com 이 분의 글을 참고하였다. 양수, 음수인 경우 사용법은 동일하다. #include #include int main(){ double n = 1.0124; cout