묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문 있습니다
안녕하십니까 선생님. 저의 경우는, 선생님과 같이 논리적인 최댓값을 미리 계산하여 그 값만큼의 거리를 두면서 모든 말을 각 마굿간에 배치할 수 있다면, 그 값은 실제 최댓값이 가능하다는 논리를 기반으로 해결하였으나, 그때 논리적인 최댓값을 이분검색으로 좁혀나가지 않고, 일단 가능한 가장 큰 최댓값을 구한 후, 1씩 줄여나가는 방법으로 좁혀나갔습니다. 그런데 제가 질문드리고 싶은 부분은, 저의 경우는 일단 첫번째 마굿간의 위치는 무조건 말을 배치시킨다고 가정한 후, 2번째 이후 마굿간 부터 거리를 계산하여, 논리적인 최댓값 이상의 거리라면 그 경우만 말을 배치시켰습니다. 그렇게 구현 한 경우, 채점 폴더는 모두 통과하였지만. 그러면 항상 첫번째 마굿간 위치에는 말이 항상 배치되어야 한다는 가정이 깔리기 때문에, 2번째 이상의 마굿간에 처음으로 말이 배치 되는 경우는 생각하지 않아도 되는지 궁금하였습니다. 그런데 만약 두번째 이상의 마굿간에 처음으로 말이 배치시켰을 때 예측한 논리적인 최댓값 만큼 모든 말을 떨어뜨리면서 말을 배치시키는 것이 가능하다면, 그것은 곧 첫 번째 마굿간에 배치시켰을 떄도 가능해 진다 라고 판단되었습니다. 즉, 2번째 이상 위치에 말을 처음으로 배치시키는 것이 가능한 경우라면, 당연히 1번째 위치에 말을 처음으로 배치시키는 것이 가능하지만 // 논리상 1번째 위치에 처음으로 배치시키는 것이 가능할 때, 2번째 이상의 위치에 처음으로 배치시키는 것이 불가능 할 수 있다 라고 생각이 되었습니다. 따라서 항상 첫번째 위치에 첫번째 말을 배치시키는 방식으로 구현하여도, 놓치는 case는 없다고 판단하였는데, 이렇게 생각하는 것이 맞는지 궁금합니다. (코드 참고) #include<stdio.h> #include <stdlib.h> #include<algorithm> void insertionSort(int*arr, int n){ int i, j; int tmp; for(i=1; i<n; i++){ tmp = arr[i]; for(j=i-1; j>=0; j--){ if(arr[j] > tmp) arr[j+1] = arr[j]; else break; } arr[j+1] = tmp; } } int main(){ int N,C; int *stall, *horse; int logical_max; int i, j; //1_1. 마구간의 수 N과 , 말의 수 C를 입력 scanf("%d%d",&N, &C); //1_2. stall[N] 과 horse[C]와 distance[C-1]을 동적할당 stall = (int*)calloc(N, sizeof(int)); horse = (int*)calloc(C, sizeof(int)); //1_3. 사용자로 부터 stall[N]의 element를 입력받음 for(i=0; i<N; i++) scanf("%d",&stall[i]); //2. 일단 stall[N]에 저장된 element를 오름차순으로 정렬할 필요가 있음 insertionSort(stall, N); //3. 논리적으로 가장 인접한 두 말의 거리가 최대가 될 수 있는 논리적인 최댓값을 계산 -> (9 - 1 + 1) / (3-1) == (end - start) / (C-1) int start, end; start = stall[0]; end = stall[N-1]; logical_max = (end-start) / (C-1); //4. 논리적인 최댓값 부터 시작해서 1씩 감소시켜 가면서 실제 최댓값을 구함 // 이때의 implementation specification // stall 배열에 저장된 마굿간의 각 위치에 순차적으로 접근하면서, // 현 시점 마굿간의 위치가 그 이전 시점 마굿간의 위치와logical_max 거리 이상 차이날 때에만, 그러한 마굿간의 위치를 horse배열에 저장한다 // horse배열에 저장한다는 의미는, 해당 위치에 말을 배치신다는 의미로 해석할 수 있다 // 즉 문제의 예시처럼, stall = [1, 2, 4, 8, 9]인 경우 // 일단 1을 horse[idx++]에 위치시킨 후 // 2를 읽어와, 2-horse[idx-1] >= logical_max를 검사한다 //(즉 방금 읽어온 마굿간의 위치가, 그 바로 직전 말을 배치시킨 마굿간의 위치와 거리를 계산했을 때, 논리적인 거리의 최댓값 이상인지 검사) // 만약 조건을 만족하면, 해당 위치에 말을 배치시켜도, logical_max거리만큼 떨어져서 배치시킬 수 있다는 뜻임으로 -> horse[idx++] = tmp // 그렇지 않다면 그냥 넘어간다 -> 이때 idx값이 증가되지 않는다는 것이 point -> 후에 for문을 다 돌았을 때, // idx==C(말의 수)이면 말을 배치시킬 때 logical_max만큼 거리를 띄우면서 배치시킬 수 있다는 뜻 이므로, 그 때의 logical_max가 곧 최댓값 // idx<C 라면 logical_max만큼 거리를 띄우면서 모든 말을 배치시키는 것은 불가능 하였다가 되므로, logical_max를 1줄이고 다시 검사해봐야 함 // 따라서 해당 logical_max값만큼 띄우면서 모든 말을 배치시킬 수 있는지를 검사하는 측면에서 가장 중요한 값은 idx! 이다(배치못시키면 jump하니깐) //즉 1에 배치시킨 후 (2-1)<4 이므로 jump // (4-1) < 4 이므로 jump // 8-1 >= 4 이므로 4에 배치 -> horse[idx++] = tmp; // 9-8<4 이므로 jump //결과적으로 idx==2 < 3 이므로 -> 모든 말을 3만큼 띄우면서 배치시키는 것은 불가능 -> logical_max를 3으로 줄이고 다시 try //1에 배치시킨 후 (2-1) < 3 이므로 jump // (4-1) >=3 이므로 3대입 // 8-4 >=3 이므로 8 대입 // for문이 끝나지도 않았는데 idx==3이 되어 , 어쨌든 3만큼 띄우면서 배치시키는 것이 가능해지면, 3이 곧 가능한 최댓값으로 판명남 int distance, tmp; int idx=0; while(1){ idx = 0; for(i=0; i<N; i++){ tmp = stall[i]; if(idx==0) horse[idx++] = tmp; else{ distance = tmp - horse[idx-1]; if(distance >= logical_max) horse[idx++] = tmp; else continue; } //for문이 다 끝나기도 전에 이미 다 배치가 완료되었다면, 그냥 바로 break해도 됨 -> 가능하단 case가 하나라도 존재하면, // 그떄의 logcial_max가 곧 실제 real_max가 되므로! (그런 logical_max만큼 떨어져서 배치시키는 case가 존재하는지 여부가 관건) if(idx == C) break; } if(idx == C) break; else if(idx < C) logical_max--; } //5. 실질적인, 인접한 말의 거리가 최대가 될 떄의, 인접한 말의 거리 출력 printf("%d\n", logical_max ); free(stall); free(horse); return 0; }
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
id 를 삭제한다는 내용 관련 질문입니다.
HTTP 요청을 변경해서 id 값을 삭제하고 요청할 수도 있다고 하셨는데, 어떤 방식으로 삭제하고 요청할 수 있는건가요? form에서 id수정을 못하도록 만들었는데, 요청을 어떻게 바꿀수 있는 것인지 궁금합니다.
-
미해결자바스크립트 비기너: 튼튼한 기본 만들기
즐거운 코딩시간
안녕하세요 선생님. 좋은 강의 감사합니다. 정말 기초부터 쌓아가는 느낌이 들어요. 확실히 체감하고 있습니다. 커리큘럼을 따라 계속 나아가겠습니다. // 누적 홀수, 누적 짝수, 전체 누적을 위한 변수에 초깃값 할당 var even = 0, odd = 0, total = 0; // for()문을 이용하여 1~50까지 반복 for (var k = 0; k < 50; k++) { // 짝수는 누적 짝수 변수에 누적으로 더합니다. if ((k+1)%2 === 0) { odd += (k+1); } // 홀수는 누적 홀수 변수에 누적으로 더합니다. else { even += (k+1); } }; // 전체 누적은 누적 홀수 + 누적 짝수와 같기 때문에 합을 할당합니다. total = even + odd; // 누적 홀수, 누적 짝수, 전체 누적 값을 출력합니다. console.log(even); console.log(odd); console.log(total);
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
혹시 추가로 분산 서버 강의 계획은 없으신가요?
강사님 강의를 재미있게 듣고 있는 수강생입니다. 다름이 아니라 가끔 언급하셨던 NPC / DB 분산 처리에 대한 강의 계획이 혹시 있으신가요?
-
미해결스프링 핵심 원리 - 기본편
강의 복습하다가 생긴 질문 및 다음 커리큘럼에 대한 질문
1. 업로드해주신 pdf 파일 기준 18페이지, 19페이지에 주문과 관련된 클래스 및 인터페이스가 Order, OrderService, OrderSerivceImpl 이렇게 총 3개가 나오는데요 OrderSerivce은 말 그대로 역할을 위한 interface이고 OrderServiceImpl은 OrderService를 상속받은 클래스인데, 왜 Order라는 클래스를 하나 더 만드셨는지 궁금합니다. (Order안에 OrderServiceImpl의 내용을 다 넣어도 되지 않았을까? 굳이 왜 저렇게 소스를 작성하셨는지가 궁금합니다. 궁금한 점을 명확하게 표현하기가 어려운데, 주문이라는 행위 하나에 왜 Order과 OrderServiceImpl 두개의 클래스를 만들었는지?가 궁금합니다. OrderServiceImpl은 주문하는 과정이고 , Order은 영수증이라고 보면 되는걸까요?) - 2. 그리고 강의를 모두 수강 했는데, 강의 마지막에 JPA 실무 완전 정복 로드맵 (야생형) 수강하는 것을 추천하셨는데 최근에 남기신 댓글에서는 김영한의 스프링 완전 정복 MVC1편까지 보고 JPA 실무 완전 정복 로드맵 (야생형) 을 추천하시더라구요 스프링 완전 정복 로드맵( MVC2편 까지) 다 수강하고 JPA 실무 완전 정복 로드맵 (야생형) 으로 넘어가면 될까요 ?? 아니면 MVC1편만 수강하고 JPA 실무 완전 정복 로드맵 (야생형) 로 공부한다음에 돌아와서 MVC2편을 수강하면 되는건가요 ? 강의 매번 잘 듣고 있습니다. 좋은 강의 감사합니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
postman 오류
강의와 모든부분 동일하게 작성했고 postman 에서 send 클릭시에 계속해서 오류가 발생하는데 어떤부분이 문제인지 모르겠습니다 ㅠㅠ GITHUB 주소 첨부합니다 ( React-Node ) 폴더 https://github.com/OHYUNBEOM index.js User.js postman 오류 visual studio code 오류
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
project에 매칭시켜 article 작성하기 질문입니다.
더운 날씨에 질문드립니다. 하다보니 어니언 사이트도 제가 생각한 방식이던데.... templates의 project detail페이지에서 article create버튼으로 이동하여 아티클을 프로젝트와 짝짓기해서 생성시키려고 합니다. templates의 project detail페이지에서 <a href="{% url 'articleapp:create' %}?project_pk={{ target_project.pk }}"> Create Article </a> 로 아티클 생성페이지로 project_pk를 넘기고 난후 뷰단에서 form_valid할때 이것을 잡아서 project를 저장해야 할 텐데....될듯 될듯 되지 않습니다. forms.py의 project = forms.ModelChoiceField(queryset=Project.objects.all(), required=False) 도 쿼리셋을 몽땅모으는게 아니니 없애고...form_valid에서 넘어온 project_pk를 받아서 처리하게 하고 싶은데 통 되질 않습니다.
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
HTTP와 포트
안녕하세요. 이 분야에 대해 개념이 잘 안잡혀 질문이 다소 황당하더라도 이해 부탁드립니다. 제가 만약 웹으로 유튜브랑 네이버를 동시에 사용중이면 둘 다 웹이므로 HTTPS 이고, 그러면 둘 다 제 컴퓨터의 443번 포트 하나에 연결되는 건가요? 저는 뭔가 유튜브랑 네이버에서 받고자 하는 데이터가 다르니까 구분되기 위해 서로 다른 포트를 부여해야 할 것 같아서요.
-
해결됨Spring Boot JWT Tutorial
User 반환값, 에러처리2개 총 3개 질문있습니다!!
정말 너무 잘보고있습니다!! 짧지만 정말 좋았는데요...! 질문이 3개가 있습니다. 1. 이게 반환값으로 롬복 Setter가 적용된 User를 그대로 반환하고 JsonIgnore어노테이션을 붙여줬는데, 실제 프로젝트에서는 반환하는 DTO를 따로 만들고 롬복 셋터도 빼주고 빌더애들도 접근제한을 걸어주면 되는걸까요? 2. 그리고 jwt에러관련애들을 따로 패키지안에 만들어두고 각각 다른 implement를 했는데, RuntimeException을 구현(상속)받고 RestControllerAdvice로 한꺼번에 모아서 에러리스폰스를 보내줘도 되는거죠? 3. Validation에 메세지를 적었는데, 저는 json 바디에 담겨서 나올 줄 알았는데 애플리케이션 레벨에서 WARN 으로 나오는데, 서버에러 500뜨고 아무것도 안나오더라구요.. 어노테이션 메세지로 적어봤자 직접 에러객체를 만들어서 보내주지 않는 이상 Validation의 message=""는 서버개발자쪽만 보는 게 되는건가요? + 추가로 @RequestHeader를 이용하는것도 있으면 좋을것같아요! 그리고 mockMvc로 api테스트하는것과, 인텔리J의 httpRequest 파일을 활용하는 방법도있더라구요! 포스트맨처럼 환경변수 받아서 저장하는것도있구요 강의잘봤습니다
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
'스스로 해보기'는 책을 구매해야 되나요?
제목 그대로입니다. '스스로 해보기' 실습을 하고 싶은데 책에만 있나요? 감사합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
save 부분
public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } 이 부분을 좀 한줄 한줄 설명해주실 수 있나요? 자바기초와 컬렉션 프레임워크, 람다까지만 떼고 온 스프링 입문자에게는 좀 설명이 부족한 것 같습니다 ㅠㅠ
-
미해결15일간의 빅데이터 파일럿 프로젝트
버추얼박스 버전
5.0버전은 pc에서 실행할 수 없다는 메세지가 뜹니다. 실행이 안되는데, 5.2버전을 다운받아도 되는지요?
-
미해결파이널 코딩테스트 : 프론트엔드
올려주신 노션 링크에 access가 안됩니다.
안녕하세요. Selenium과 Cypress강의에서 노션에 access가 안돼서 문의드립니다. -
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
인증 이메일 다시 보내기 할 때 NullPointerException
인증 이메일 다시 보내기 버튼을 누르면 null로 떠서 오류가 나는데 이럴 때는 어떻게 하면 좋을까요 ?????
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
dockerrun.aws.json 문의
dockerrun.aws.json을 사용하면 docker-compose.yml 을 사용안하고 각각 Dockerfile만 있으면 되나요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
제네릭을 적용한 BaseEntity 응용에 관한 질문입니다.
명강의 남겨주신 김영한 강사님 Respect 합니다.모든 JPA 강의는 패스했고 Spring MVC 고급편 듣고있습니다요. 좋은강의 감사드립니다. 제가 예제 응용시 BaseEntity 를 확장해보려고 예제 작성중에 몇가지 궁금증이 생겨 이렇게 질문을 남기게 되었습니다. 아래는 클래스 계층구조입니다. 위에서 BaseEntity 를 타입 파라미터를 적용하여 하위 엔티티를 추상 계층에서 핸들링 하기위해 아래와 같이 BaseEntity 에 제네릭을 적용 해봤습니다.아래는 BaseEntity 선언부 입니다. public abstract class BaseEntity<T extends BaseEntity<T>> public abstract class BaseEntity<T extends BaseEntity<? extends BaseEntity<T>>> 여기서 너무나도 햇갈리게 되었는데요, 딱히 컴파일 시 애러가 나지는 않았음에도 불구하고, 초반에는 1번처럼 작성했다가, 나중에 2번으로 바꾸게 되었는데요, 이유는 와일드카드 ? 가 안전하다고 해서 적용하게 되었는데, 컴파일 애러는 안나지만 불안감이 들어서 질문하게 되었습니다. 사실, 이렇게 BaseEntity 제네릭타입 선언부를 수정하게 된 배경은 BaseEntity 를 바탕으로 BaseService 도 만들게 되었는데요1번처럼 BaseEntity 작성시서비스를 아래와 같이 작성해 보았더니 적용에 문제가 있었기 때문입니다. public abstract class BaseService<E extends BaseEntity<E>, DTO> { 그래서 타입 E 를 와일드 카드를 적용했더니 아래와 같이 바꿨더니 문제가 없었습니다 public abstract class BaseService<E extends BaseEntity<?>, DTO> { 이 부분때문에 Entity 까지 손보게 되었던 것이었죠...제네릭 너무너무 햇갈립니다. 선언하기 부터 맨붕이예요...상속구조의 제네릭 클래스 예시를 찾기가 어려워 이렇게 남기게 되었습니다. 질문입니다. 위 BaseEntity 제네릭 적용에 두가지 선언 방식은 왜 다른걸까요...제눈에는 `BaseEntity 를 상속받은 타입` 이라는 논리가 같아보여서 질문하게 되었습니다. 강사님이시면 좀더 어떤 효과적인 방식으로 구성하실지 견해를 배우고 싶습니다. 몇번을 다시봐도 배울게 많은 강의 항상 고맙습니다.읽어주셔서 감사드립니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
createquery에서 like 검색하려면
예를 들어 '김민수' '김영희' 이 두사람이 db에 저장되어 있을 때, '김'이라는 키워드를 입력받으면 두 사람이 나오는 like 검색 기능을 만들어 보고 싶은데요. keyword는 :keyword 와 같은 식으로 받아와야하는데, 보통 매개변수를 받아오는 것 말고 a 나 b처럼 정해진 문자들만 포함한 방식만 구글링에서 나오더라고요. "select m from Member m where m.name like '%:keyword%'" 이런식으로 하면 keyword가 문자열로 인식 될텐데, concat을 이용해야하나요? '%':keyword'%' 이런식으로 쿼리문을 생성해야 하나요?
-
미해결3dsmax 초급부터 전문가까지 - 한방에 끝내는 3dsmax 강좌
탱크 모델링 14
안녕하세요~ 탱크 모델링 14 에서 ATTACH 시키고 난 후 엘리먼트 상태에서 눌렀는데 오른쪽과 같이 따로 선택되는 게 아니라 전체가 선택됩니다 다시 해도 핀 자체가 선택이 되더라구요
-
미해결홍정모의 따라하며 배우는 C언어
signed char에 최고 FF가 홀드 되어야 하는데 왜 FFFF가 표시 되는지 궁금합니다
4.10절 21라인 강의를 듣다가 아래와 같은 시험을 하였습니다. - 변수 j는 signed char로서 1바이트에 – 128 ~ 127까지를 저장(hold)할 수 있다. - scanf() 로 -1을 읽어 들이면 마이너스는 2의 보수로 표현하므로 j에 FF가 입력되어야 한다. 그런데 첫번째 printf를 보시면 왜 FFFF가 표시 되는지 모르겠습니다. 2번,3번째 printf는 형식지정자에 맞게 출력 된 것 같기도 합니만, j변수에는 분명 FF가 저장되어 있을 텐데 이해가 가지 않습니다. 그 이후 printf도 마찬가지입니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
Curl error 51 에러, SSL 인증서
안녕하세요. 테스트 과정에서 클라에 다음과 같이 에러가 납니다. Unknown Error가 뜹니다. 또 AccountServer를 실행하면 SSL 인증서를 신뢰하겠냐고 뜹니다. 아니요를 누르면 평소대로 실행이 되구요. 예를 누르면 인증서를 설치 한다고 하는데, 인증서 설치가 필요 한가요?