본문 바로가기

프로그래밍

(37)
[백준 C언어] 2798. 블랙잭 문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다. 이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. N장의 카드에 써져 있는 숫자가 주어졌을 때, ..
[백준 C언어] 2941. 크로아티아 알파벳 문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다. 입력 첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다. 단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다. 출력 입력으로 주어진 단어가 몇 개..
[백준 C언어] 2292. 벌집 나의 풀이 #include int main(void) { int n, room=1, cnt=1; scanf("%d", &n); while (room < n) { room += cnt * 6; cnt++; } printf("%d", cnt); } 벌집은 한 겹 둘러싸일 때마다 일정한 간격으로 늘어난다. 중앙을 0번째 겹이라고 치고 첫 번째 값은 1, 다음 겹에서 제일 큰 값은 7, 그 다음은 19, ...이런 식인데, 여기에서 규칙성을 찾을 수 있다. 순서(i) 0 1 2 3 4 숫자 1 7 19 37 61 규칙 1+6*0 1+6*1 7+6*2 19+6*3 37+6*4 이전 항+6*i가 되는 것이다. 즉 답을 구하려면 저 규칙에 따라 쭉쭉 올라가며, 값이 문제의 입력값 n을 넘어섰다면 그대로 i를 반환해주..
[백준 C언어] 3052. 나머지 나의 풀이 #include int main(void){ int n, count=0; int modArr[42]={0}; //0~41의 범위에서, 나머지가 존재하는지 여부를 저장할 배열 for(int i=0;i
[백준 C언어] 2908. 상수 나의 풀이 #include int revNum(int n) { int result = 0, i = 0, arr[3] = {100,10,1}; while (n > 0) { result += n % 10 * arr[i++]; n /= 10; } return result; } int main(void) { int a, b; scanf("%d %d", &a, &b); printf("%d", (revNum(a) > revNum(b)) ? revnum(a) : revnum(b)); return 0; } 숫자를 뒤집어주는 기능을 따로 빼서 함수로 만들어주었다. 각 숫자의 위치를 바꿔서 10의 자리에 맞게 곱연산을 해준 후 합을 구하는 로직인데, 곱연산에는 Lookup Array를 사용하였다. 사실 배열을 사용하지 않..
[C언어] 10809. 알파벳 찾기 나의 풀이 #include #include int main(void) { int c, index = 0, arr[26];//arr : 정답을 저장해 줄 배열 memset(arr, -1, sizeof(arr)); //배열 -1로 초기화 while ((c = getchar()) != '\n') {//개행 전까지 단어 한 글자씩 비교 if (arr[c - 97] == -1) { //해당 알파벳이면 인덱스값을 배열에 넣기 arr[c - 97] = index; } index++; } for (int i = 0; i < 26; i++) { printf("%d ", arr[i]); } return 0; } memset()은 string.h에 들어있는 함수다. 메모리를 초기화할 때 편하다. 단순히 0으로 초기화할 때는..
[C, C++] 한글 입출력(printf, scanf) 시 오류가 날 때 해결 방법 위 사진이 뭐냐면, 위에서 이름, 나이, 취미를 입력받고 아래에서 입력받은 내용을 출력하는 코드를 실행한 결과이다. 그런데 결과가 이상하다. 띠용! 보다시피 입력부분이 정상적으로 출력되지 않고 @로 대치되는데, 운이 좋다면 공백 또는 p, ` 등 오만 이상한 글자를 만나볼 수 있다. 또 입력뿐만 아니라 printf로 단순출력 시에도 한글이 깨지는 경우가 왕왕 있다. 내가 이걸로 2시간 고생했기 때문에 오늘은 1. 한글 출력시 깨지는 경우와 2. 위 오류의 해결방법을 쓰도록 하겠다. 1. 한글 출력 시 깨지는 경우 아마 ide를 처음 설치한 후 한글을 입출력하게 되면 위와 같은 외계어에 맞닦뜨리는 분들이 많을 것이다. 일단 한글을 출력했더니 깨질 때에는 여러 해결 방법이 있는데, 제일 많이 사용하는 방법은..
[Python] 딕셔너리에서 value로 key값 가져오는 법 딕셔너리 자료형을 사용할 경우, 보통 key값을 이용해 value를 가져오게 된다. 아래는 key값으로 모스부호, value값으로 알파벳이 저장된 딕셔너리를 이용해 모스부호를 해독하는 코드이다. letter='.... . .-.. .-.. ---' morse = { '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f', '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l', '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r', '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x', '-...