diff --git "a/06_\352\267\270\353\246\254\353\224\224/1213.cpp" "b/06_\352\267\270\353\246\254\353\224\224/1213.cpp" new file mode 100644 index 0000000..1e72a6e --- /dev/null +++ "b/06_\352\267\270\353\246\254\353\224\224/1213.cpp" @@ -0,0 +1,61 @@ +#include +#include +#include +#include + + +using namespace std; + +//사전순으로 앞서는 것을 출력 +//-> 알파벳 배열의 앞에서부터 순서대로 접근하여 문자열에 넣어주면 된다. +//별도의 정렬이 필요하지 않음 +pair canNotPalindrome(vector& alpha){ + int cnt = 0; + int mid_index=-1; + for(int i = 0; i < 26; i++) + if(alpha[i] % 2 == 1) { + cnt++; + mid_index=i; + alpha[i]--; + } + return {cnt, mid_index}; + +} + + +string palindrome(const vector& alpha, int mid_idex){ + string ans = ""; + for(int i = 0; i < 26; i++){ + if(alpha[i]>0){ + for(int j = 0; j < alpha[i]/2; j++){ + ans += i + 'A'; + } + } + } + string reverse_ans = ans; + reverse(reverse_ans.begin(), reverse_ans.end()); + if(mid_idex!= -1){ + ans += 'A'+mid_idex; + } + ans+= reverse_ans; + return ans; +} + +int main() { + string s; + vector alpha(26, 0); + cin >> s; + for(int i = 0; i < s.size(); i++){ + alpha[s[i]-'A']++; + } + pair odd_info = canNotPalindrome(alpha); + + if(odd_info.first>1) { + cout << "I'm Sorry Hansoo"; + return 0; + } + + cout<< palindrome(alpha, odd_info.second); + + return 0; +} \ No newline at end of file diff --git "a/06_\352\267\270\353\246\254\353\224\224/17451.cpp" "b/06_\352\267\270\353\246\254\353\224\224/17451.cpp" new file mode 100644 index 0000000..ddaf0d1 --- /dev/null +++ "b/06_\352\267\270\353\246\254\353\224\224/17451.cpp" @@ -0,0 +1,35 @@ +#include +#include + +using namespace std; +typedef long long ll; + +ll minSpeed(int n, vector& speed){ + for(int i=n-2; i>=0; i--){ + //현재 속도가 다음 행성까지의 최소 속도보다 느리면 + if(speed[i] 반복문으로 계산하지 않는다. + if(speed[i+1]%speed[i]==0){ //배수관계인 경우 + speed[i] = speed[i+1]; + } + else{ //배수관계가 아닌 경우 + speed[i] = speed[i] * (speed[i+1] / speed[i] + 1); + } + + } + } + return speed[0]; +} + +int main() { + int n; + cin >> n; + vector speed(n, 0); + for(int i=0; i> speed[i]; + } + + cout << minSpeed(n, speed); + return 0; +} \ No newline at end of file diff --git "a/06_\352\267\270\353\246\254\353\224\224/18111.cpp" "b/06_\352\267\270\353\246\254\353\224\224/18111.cpp" new file mode 100644 index 0000000..5b4543a --- /dev/null +++ "b/06_\352\267\270\353\246\254\353\224\224/18111.cpp" @@ -0,0 +1,56 @@ +#include +#include + +using namespace std; + + +pair plainGround(int n, int m, int b, vector>& ground, int vmin, int vmax){ + int mintime = 256*500*500*2, maxheight = 0; + for(int h=vmin; h<=vmax; h++){ //땅의 높이는 vmin~vmax까지 가능 + int add = 0, rm = 0; //더하는 블록의 수, 빼는 블록의 수 + for(int i=0; i=0){ //블록을 제거하는 경우 + rm += height; + } + else { //블록을 추가하는 경우 + add += -height; + } + } + } + //더하는 블록의 총 개수, 빼는 블록의 총 개수를 가지고 시간 계산 + if(rm+b-add>=0){//사용하는 총 블록의 수가 음수가 되면 안됨 + int time = add + rm * 2; + if(mintime >= time){ + //최소시간 갱신되는 경우 (동일한 최소시간인 경우 최대높이인 답을 반환하도록 조건에 '등호' 사용) + mintime = time; + maxheight = h; + } + + } + } + + return {mintime, maxheight}; +} + +int main() { + int n, m, b, input; + int vmin = 257, vmax = 0; + cin >> n >> m >> b; + vector> ground (n, vector(m, 0)); + for(int i=0; i> input; + //높이 중 최소와 최대를 구함 + vmin = min(vmin, input); + vmax = max(vmax, input); + ground[i][j] = input; + + } + } + pair ans = plainGround(n, m, b, ground, vmin, vmax); + cout << ans.first << " " << ans.second; + + return 0; +} \ No newline at end of file