구름톤 챌린지 10

구름톤 챌린지 DAY 11 - 통증(2)

오늘 문제는 지난주에 너무 쉽게 풀었던.. 통증을 진화한 버전이다. 통증1에서 언급했던 대로 아이템의 수치끼리 배수 관계가 아니며, 통증을 0으로 만들 수 없다면 -1을 출력하라는 조건이 더 붙었다. 개인적으로는 이게맞지~ 싶으면서도 조금 어려웠던 것 같다. 그래도 웬일인지 머리가 좀 잘돌아가서..? 빠르게 해결을 보았다. 결과는 정답! 해설은 해설지가 올라온 후에 올리겠다.

구름톤 챌린지 DAY10 - GameJam

오늘 공지사항을 봤는데, 라고 나와있어서 해설 강좌가 공개될 때까지 올리지 않기로 했다. (근데 해설과 관련된 내용은 공유하지 말라고 하는데, 그럼 블로그에 내가 푼 코드도 올리면 안되는 걸까? 문의 해봐야겠다) 문의 해본 결과, 해설지와 코드 그대로를 올리는 게 금지라고 한다. 그래서 개인 해설은 괜찮다고 한다! 그래서 일단은, 오늘 문제 풀면서 느낀점! 오늘은 GameJam을 풀어봤는데, 예시 2가 이해가 안가서 문의를 했다. Q&A게시판이 있던데 거기는 글 작성 버튼이 없어서 1:1 문의로 했다. Q&A 게시판 사용법도 여쭤봤는데 친절하게 답해주셨다. 우측 하단에 Q&A가 조그맣게 있는 걸 볼 수 있고, 옆면에 < 로 열 수 있는 공간이 있는데 거기도 Q&A이다. 문의 하고 나니 Q&A에 질문이 올..

구름톤 챌린지 DAY9 - 폭탄 구현하기(2)

문제) N크기의 정방형 board에 0, #, @가 있다. 이 board에 폭탄을 떨어뜨리는데, 폭탄은 떨어진 곳 + 상하좌우에 영향을 준다. 땅의 상태에 따라 폭탄 값이 변하는데, 0은 +1, #은 변화 없음, @은 +2씩 변화한다. 모든 폭탄이 떨어진 후 가장 큰 폭탄 값을 구하라. 구현 방법) 1. board에는 0을 모두 채우고, #와 @의 위치만 받아서 저장한 후 폭탄의 범위와 비교해서 땅의 상태에 따라 다르게 업데이트 한다. 2. board에는 폭탄 값을, board_status에는 땅의 상태 값을 넣어서 마찬가지로 상태 값을 보고 다르게 업데이트한다. 구현) 처음엔 방법1로 했다가 잘 되는데 계속 timeout이 떴다. 아무래도 struct나 vector로 #과 @의 위치를 받아서 비교하고 ..

구름톤 챌린지 DAY8 - 통증

문제) 통증이 주어지는데, 이를 0으로 만드는게 목표이다. 통증을 줄일 수 있는 아이템은 bandage, medicine, painkiller가 있고, 각각 1, 7, 14만큼 통증을 줄여준다. 통증을 0으로 줄이기 위한 아이템의 최소 개수를 구하라. 문제 해석) 자판기 돈 거슬러주는 문제같다. 구현 방법) 통증(N)을 14로 나누고, 그의 나머지를 7로 나누고, 그의 나머지를 1로 나눈다. 먼저 가시성, 가독성을 위해 enum값으로 각각의 아이템의 수치를 부여한다. 입력값을 받는다. 먼저 N을 painkiller로 나누고 몫(개수)는 최종 답인 leastItem에 더해준다. 그 후 위의 나머지는 다시 N이 되고, 그 N을 medicine을 나누고, 몫은 leastItem에 더해준다. 그의 나머지는 다시..

구름톤 챌린지 DAY7 - 구름 찾기 깃발

문제) 한 변의 길이가 N인 게임판에서, 어떤 칸에는 구름이 그려져 있고, 우리는 구름이 그려져 있지 않은 칸에 깃발을 꽂아 주위에 구름이 몇개 있는지 나타낸다. 이때 입력값으로 받은 K와 같은 깃발이 몇개 있는지 구하라. 문제 해석) 지뢰 찾기 게임에서, 지뢰가 아닌 칸을 클릭하면 주위에 있는 지뢰의 개수를 알려주는 숫자가 나타난다. 이걸 구현하면 된다. 구현 방법) 1. 전체 순회 하면서 0인 칸에 대하여, 주위 칸에 1이 있으면 그걸 counting, 2. counting한 숫자를 vector에 넣어서 K값과 비교하며 숫자 세기 N, K는 받아와서 예외를 처리해준다. C++에서 동적 배열은 반복문을 통해 이중 포인터로 만든다. 위와 같이 먼저 new로 할당을 해준 후에, 반복문과 cin으로 입력값을..

구름톤 챌린지 DAY6 - 문자열 나누기

문제) 1. 문자열 S가 주어진다. 2. 이 문자열을 세부분으로 나누는데, 각 부분은 원래 문자열 순서대로 서로 연결되어 있어야 한다. 3. 모든 경우의 부분집합을 구하고 그것을 사전 순서대로 정렬했을 때, 4. 각 경우의 수의 각 부분집합이 정렬한 부분집합들의 몇번째에 나타날 텐데, 이때 이 '몇'이 점수가 된다. 5. 경우의 수마다 세 부분집합의 점수가 나오는데, 이 합이 최종 점수가 된다. 최대 점수를 구하라. 생각해보기) 1. 세 부분으로 나눌 수 있는 모든 경우의 수를 구하고 2. set에 넣고, 정렬 3. 경우마다 점수를 구하고 가장 큰 점수를 구하기 쉽게 생각하면, 배열 안에 작대기 두개를 넣는다고 생각하면 된다. 그리고 중복 for문처럼 int i = 0; i++ / int j = i; j++

구름톤 챌린지 DAY5 - 이진수 정렬

문제) 정수가 여러개 주어지는데, 각 정수들을 이진수로 표현했을 때 1의 개수가 많은 순으로 정렬하려고 한다. 이때 K번째 정수가 무엇인지 구하라 (1의 개수가 같을 때는 10진수에서 큰 순서 대로) 두 가지 방법을 생각했는데, 1. 먼저 내림차순으로 정렬한 다음 순서대로 1의 개수를 구해서 해시테이블? 연결 리스트?에 저장 2. 우선 1의 개수를 먼저 다 구해서 개수가 많은 것부터 정렬을 해서 합치기 결론적으로는, 2번으로 하다가 부분 성공을 했다. 인자들이 많아지면서 Timeout이 걸린다. algorithm 헤더파일을 사용하기 싫어서, 가장 큰 값을 구하고 그 값을 최종 벡터에 넣고 원래 있던 벡터에선 없애고 다시 그걸 반복하는 그런 코드를 짰었다. 우선, 2진수로 표현하는 과정에서 1의 개수를 r..

구름톤 챌린지 DAY4 - 완벽한 햄버거 만들기

문제) 1. 햄버거 재료의 수와 각 재료의 맛을 받아오고, 2. 햄버거의 맛은 모든 재료의 합을 뜻한다. 3. 가장 큰 숫자의 재료를 기준으로, 위랑 아래로 작아지거나 같아야 한다. 이 조건을 못지키면 햄버거의 맛은 0이 된다. 문제를 보고 해야하는 건, 1. 각 재료들 중 가장 큰 값을 찾는다. 2. 가장 큰 값을 기준으로 왼쪽, 오른쪽으로 갈수록 작아져야 한다. 2.가 문제일텐데, 이건 반복문이나 재귀함수로 풀 수 있을 것 같다. 가장 큰 값을 기준으로 반반 나누는 걸 보니, 합병정렬이 생각나서 재귀함수로 풀어보고 싶어졌다. 재귀함수는 각각 이렇게 해주었다. 왼쪽으로 가는건 lower함수, 오른쪽으로 가는건 upper함수고, 각각 비교한 뒤 왼쪽으로 한칸씩 가서 또 비교하는 함수이다. 만약 작아지지 ..

구름톤 챌린지 DAY3 - 합 계산기

문제) 계산 식의 개수와 각 계산 식이 주어지면, 각 계산 식의 값을 모두 더한 값을 출력 첫 줄에 식의 개수(T), 그 다음 줄부터 식의 개수에 따른 식 1. 구조체 생성 이번 문제는 한 줄에 정수 두개, operator 하나를 받아 계산하는 문제인데, 이를 좀 더 편하고 가독성 있게 사용하기 위해 구조체를 만들었다. 피연산자 두개, 연산자 하나, 그리고 그 식의 결과를 담을 수 있는 Formula 구조체이다. 2. 식의 개수 받아오기 T는 식의 개수로서, 입력받는다. 3. 계산식 받아오기 T만큼 반복하는 반복문 안에서, 만들어뒀던 구조체 타입의 formula 변수를 선언하고, cin으로 정수1, 연산자, 정수2를 받아온다. 4. 연산자에 따라 식 계산 받아온 연산자에 따라 그에 맞는 계산을 하기 위해..

구름톤 챌린지 DAY2 - 프로젝트 매니징

문제 요약) 1. 일을 하는데, 일의 개수, 각 일마다 걸리는 시간, 시작하는 시간이 주어질 때 종료 시간을 구하라. (23시 59분에서 1분이 지나면 0시 0분이다.) 첫 줄이 일의 개수(N), 그 다음줄이 시작 시간(T M), 그 다음줄이 일의 개수 만큼의 걸리는 시간이다. 우선 문제를 주석으로 정리하면, 위와 같다. 우선 N과 T, M을 받아서 범위 체킹을 한다. 일감은 N만큼 받아와야 하는데, 동적 배열을 만들어도 되지만 C++를 한 김에 좀 더 편리한 벡터를 사용하기로 했다. #include 로 벡터를 추가한 후, Ci vector를 만든 후, 값 체킹을 한 후 push_back하는 코드이다. 이후가 문제인데, 사실 이 문제는 시간 계산이 주 목적인 것 같다. 두 가지 방법 정도가 있는데, 받아..