7월, 2019의 게시물 표시

C++ 예제 (넥슨 프로그래밍 대회 문제풀이 4)

이미지
NYPC 2018 예선 5번째 문제입니다. 개인적으로 현재까지 풀어본 예선문제 중에서 가장 재미있었습니다. 최고의 동접 구간을 찾아라! 게임 분석가 승민이는 넥슨의 게임 메이플스토리가 얼마나 인기가 높은지 알고 싶어졌다. 게임의 인기는 접속한 유저 수로 알 수 있고, 특히 동시에 몇 명의 유저가 접속해 있는지를 아는 것은 게임의 인기 뿐 아니라, 게임의 관리자 입장에서도 얼마나 많은 자원을 투자해야 하는지 중요한 자료가 된다. 따라서 승민이는 가장 많은 유저들이 동시에 접속한 구간을 손쉽게 찾아내고 싶다. 넥슨은 승민이에게 유저들의 로그인 시간과 로그아웃 시간이 저장된 로그 파일을 제공했다. 여러분은 승민이를 도와서, 이 로그 파일을 이용하여 가장 많은 유저들이 동시에 접속한 구간을 찾아내는 프로그램을 작성하자. 입력 형식 첫째 줄에 로그의 수 N (1 ≤ N ≤ 300,000)가 입력된다. 다음 N 줄에 유저 하나가 로그인한 시간과 로그아웃한 시간이 공백으로 구별되어 주어진다. 시간은 24시간의 형태로  hh:mm , 즉 시:분의 형태로 항상 두 자리씩 주어진다. 로그인 시간은 로그아웃 시간보다 반드시 앞선 시간이며, 게임을 하는 동안 날짜가 바뀌는 경우는 없다. hh=24인 경우는 없다. 로그아웃 시간이 00:00인 경우는 주어지지 않는다. 출력 형식 가장 많은 유저가 동시에 접속한 기간을 찾아서, 먼저 이 기간에 로그인한 유저의 수를 출력한다. 다음, 이 기간의 시

C++ 예제 (넥슨 프로그래밍 대회 문제풀이 3)

이미지
저번에 이어 4번째 NYPC 2018 예선 문제입니다. 링크 : 예선 1~2번 문제 풀이 (아이템구매, 승리팀 찾기) 링크 : 예선 3번 문제 풀이 (줄임말) 먼저 문제를 한번 살펴보겠습니다. 우물왕 김배찌 물 부족 국가의 어린이들에게 깨끗하고 신선한 물을 선물하기 위해 김배찌님은 마을에 우물을 파기로 했다. N 채의 집이 있는 한 마을에 우물 하나를 파주려고 하는데, 이 우물이 각 집들에서 너무 먼 거리에 있다면 물을 길으러 오가는데 시간과 노력이 많이 들어서 효용성이 떨어진다. 따라서, 각 집들까지 거리의 제곱이 최소가 되는 위치에 우물을 파려고 한다. 즉, 우물의 좌표가 (x, y)이고 첫번째 집의 좌표가 (x 1 , y 1 ) 이라면, 우물과 첫번째 집까지 거리의 제곱은 (x-x 1 ) 2  + (y-y 1 ) 2  이 된다. 비슷한 식으로 우물로부터 각 집까지의 거리의 제곱의 합을 구하면 (x-x 1 ) 2  + (y-y 1 ) 2  + (x-x 2 ) 2  + (y-y 2 ) 2  + ... + (x-x N ) 2  + (y-y N ) 2  이 되며, 이 값이 최소가 되는 좌표 (x, y) 에 우물을 파면 된다. 모든 집으로부터 거리의 제곱의 합이 최소가 되는 우물의 좌표 (x, y)를 구하는 프로그램을 작성하시오. 입력 형식 첫째 줄에 이 마을에 있는 집의 수를 나타내는 자연수 N이 주어진다 (1 ≤ N ≤ 300,000). 그 다음 N 줄에는 한 줄에 하나씩 집의 좌표 (x i , y i )를 나타내는 두 정수 x i 와 y i 가 주어진다 (0 ≤ x i , y i  ≤ 100,000,000). 출력 형식 출력은 한 줄에 두 실수 x와 y를 출력하는데, 이는 주어진 조건을 만족하는 우물의 위치 (x, y)를 나타낸다. 출력한 두 값이 모두 정답과 차이가 0.001 이내라면 정답으로 인정된다. 입력 예제 5 1 2 2 6 3 2 4 7 1 2 출력 예제 2.2 3.8

C++ 예제 (넥슨 프로그래밍 대회 문제풀이 2)

이미지
넥슨 청소년 프로그래밍 대회(NYPC) 2018년 예선 1~2번 문제 에 이어 다음 문제도 살펴보겠습니다. 자세한 내용은 NYPC 홈페이지를 참조바랍니다. 줄임말 문제입니다. 줄임말 좀 놀 줄 알려면 줄임말을 잘 써야 한다. 요즘은 문장에서 단어들의 첫 글자만을 따와서 줄임말을 만들곤 한다. 예를 들어, '애교 빼면 시체'를 '애빼시'라고 하고 '혼자 코인 노래방'을 '혼코노'로 부른다. 문제에서 주어지는 문장들은 다음을 만족한다. 1) 한글과 영어로 이루어진 문장이다. 2) 문장은 단어들로 이루어지고 단어들 사이에는 공백이 하나 존재한다. 단어는 한글과 영어가 혼용될 수 있다. 3) 문장은 그 뜻이 명확하지 않아도 된다. 우리가 읽었을 때 그 의미를 이해할 수 없을 수도 있다. 문장이 주어지면 단어들의 첫 글자를 딴 줄임말을 출력하는 프로그램을 작성하시오. UTF-8 한글 문자열을 해독하는 방법은 인터넷을 검색하여 알아내어 보자. 언어의 표준 라이브러리 이외에 다른 사람의 코드를 복사해서 사용해서는 안된다. 입력 형식 첫째 줄에 문장의 개수를 나타내는 정수 N(1 ≤ N ≤ 1,024)이 주어진다. 다음 이어지는 N개의 줄 각각에 하나의 문장이 주어진다. 하나의 문장은 16개 이하의 단어로 이루어져 있으며, 각 단어는 64자 이하이다. 단어는 한글 글자와 영어 대문자, 소문자로 이루어져 있다. 한글 글자 중에서 완전하지 않은 낱자(ㄱ,ㄴ,...,ㅎ,ㅏ,ㅑ,...,ㅣ 등)는 주어지지 않는다. 주어지는 입력은 UTF-8(BOM 없음)으로 인코딩 된 입력이다. 출력 형식 N개의 줄에 걸쳐 정답을 출력한다. 출력의 i번째 줄에 입력에 주어진 i번째 문장으로 만든 줄임말을 출력한다. 출력 내용을 붙여넣기로 직접 제출하는 것을 권장하며, 업로드로 파일을 제출하는 경우 파일은 UTF-8(BOM 여부 상관 없음)로 인코딩되어야 한다. 입력

자동판매기 잔돈계산 (파이썬, C++ 예제)

이미지
이전 게시물 중 자동판매기를 구현한 2가지 코드가 있었습니다. 자동판매기 (파이썬, 절차지향적) 자동판매기 (파이썬, 객체지향적) 자판기 코드의 완성도를 높이기 위해 잔돈 반환 기능 을 넣어본다면 어떨까요? 그냥 남은 잔액만 표시(잔액 : 1234원)되는 것이 아닌, 500원, 100원, 50원, 10원, 1원 동전으로 말이죠. 물론 동전은 가능하면 큰 단위로 나오는 것이 편리 합니다. 예) 잔액이 1234원인 경우 아래 그림처럼 나오도록 할 수 없을까요? 심화반 수업중에 이런 질문을 하신 분이 있어 만들어 보았습니다. 먼저 어떻게 만들어야 할지 생각해 보겠습니다. 잔액 확인 (입력을 통해 처리) 단위가 큰 동전부터 처리해야 함 잔액(예 1234원)을 큰 동전부터 나누어 몫과 나머지를 이용 1234 / 500원 = 몫(2), 나머지 (234) 234 / 100원 = 몫(2), 나머지 (34) 34 / 50원 = 몫 (0), 나머지 (34) 34 / 10원 = 몫 (3), 나머지 (4) 4 / 1원 = 몫 (4), 나머지 (0) 결과 : 500원 2개, 100원 2개, 50원 0개, 10원 3개, 1원 4개 먼저 C++ 로 만든 잔돈 반환 코드입니다. #include <iostream> using namespace std; int main() { int x; cout << "거스름돈 입력 : "; cin >> x; if (x <= 0) { cout << "거스름돈 없음" << endl; return 0; }

C++ 예제 (넥슨 프로그래밍 대회 문제풀이 1)

이미지
오늘은 전년도 2018년 넥슨 청소년 프로그래밍 대회(NYPC) 예선 문제를 C++로 만들어 보았습니다. 대회 진행방식은 온라인으로 예선문제를 풀어 제출하고, 이중 본선진출자를 선정해 넥슨판교사옥에서 본선을 진행한다고 합니다. 자세한 2019년 대회 소개 및 일정은 아래 내용과 링크 사이트를 통해 참조 바랍니다. 대상 : 12세 ~19세 누구나 참가 언어 : 파이썬, 자바, C#, C, C++ 링크 : NYPC 2019   그럼, NYPC 2018 예선 첫번째 문제풀이 입니다. 다른 문제풀이는 아래 링크를 참조해 주세요. 예선 문제 풀이 2 예선 문제 풀이 3 예선 문제 풀이 4 첫 문제라 다른 문제에 비해 난이도는 쉬운편입니다. [문제 1 : 아이템 구매] 게임개발자 상현이가 개발 중인 게임의 상점에는 체력 물약과 마나 물약 두 종류의 아이템만 판매하고 있다. 상현이는 유저들의 판매 로그를 기록해야하는데, 실수로 그만 유저들이 상점에서 사용한 총액만 기록하고 말았다. 체력 물약의 가격은 P원이고, 마나 물약 가격은 Q원이다. 그리고 한 유저가 상점에서 사용한 총액은 W원이다. 상현이를 도와 유저가 상점에서 구매한 아이템 개수를 구하는 프로그램을 작성하시오. [풀이] 알고리즘 문제는 문제를 정확히 이해하는 것이 중요합니다. 한마디로, 물약(체력, 마나)의 가격과  전체 총액은 아는데 구입 개수가 몇 개인지 구하라 는 문제입니다. (단, 1<= 물약의 개수 <= 500,000 , and 해가 여러개인 경우 아무 답이나 출력) 예) 체력물약가격 : 9, 마나물약 가격 : 7 , 총액 : 55 방정식을 세워보면 9x + 7y = 55

이 블로그의 인기 게시물

Qt Designer 설치하기

C++ 예제 (소켓 서버, 이미지, 파일전송)