inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

members/new 회원가입 whitelabel 오류

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 안녕하세요, localhost:8080/members/new에 접근하면 whitelabel에러가 떠서 이유가 무엇인지 질문 드립니다. 오타같은 것도 없고 구조도 정확한 것 같은데 어떤 부분이 문제인건지 전혀 모르겠습니다... hello.hellospring/controller/HomeController hello.hellospring/controller/MemberController resources/templates/home.html resources/templates/members/createMemberForm.html 폴더 구조 실행 결과

  • java
  • spring
  • mvc
  • spring-boot
새우좋아하새우? 댓글 2 좋아요 0 조회수 563

swap 함수에서 printf문 질문있습니다

미해결

홍정모의 따라하며 배우는 C언어

수업 내용의 프린트 구문은 void swap(int* u, int* v) { printf("%p %p\n", u, v); int temp = *u; *u = *v; *v = temp; } 이런식으로 되어있는데 u와 v에 &기호를 붙혀주면 a, b 와 주소가 다르게 나오는데 어떤 주소인지 잘 모르겠습니다..

  • c
cksgur 댓글 1 좋아요 1 조회수 330

스프링 시큐리티 HttpSeurity.apply() derpeciated 도움 부탁드려요!

미해결

안녕하세요! 최근 스프링 시큐리티가 패치되면서, 기존 메서드 체이닝 방식이 아닌 람다식을 통해 함수형으로 설정하도록 바뀌었는데요. 다른 설정 부분은 새롭게 바뀐 방식을 찾았으나.... 아래 사진의 마지막 apply() 는 도저히 찾을 수가 없더라고요...ㅠ 혹시 아시는 분계실까요? ('apply(C)' is deprecated since version 6.2 and marked for removal )

  • spring-boot
  • spring-security
  • java
developer 댓글 1 좋아요 0 조회수 1817

RestTemplate 호출하여 응답기다릴때도 runnable 이 맞나요?

미해결

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

우선 좋은 강의 감사드립니다. 강의내용중 running -> runnable 로 이동하는 방법에 yield, I/O 가 있다고 하셨는데, DB query 등을 하면 응답이 올때까지 waiting으로 상태변경이 되는게 아닐까 싶어 샘플코드를 짜보니 정말로 running-> runnable 상태이던데, 1) 응답이 올때까지 기다리는 것이기도 하고 2) runnable 이면 언제라도 running이 될수 있는데, 이 경우 running -> runnable -> running 으로 상태변경되었는데 아직 응답이 오지 않았으면 다시 runnable 로 넘어가고.. 이런게 반복되는건가요? 샘플코드는 아래와 같이 만들어봤습니다. RestTemplate template = new RestTemplate(); template.getEntity(xxx); // 응답이 10초 걸리는 api 호출 10초 내에 위 작업을 하는 쓰레드의 상태를 log 로 찍으니 runnable 로 나왔습니다.

  • java
  • concurency
  • multithread
  • synchronisation
void 댓글 1 좋아요 2 조회수 452

10.14강 11:11 질문이 있습니다.

해결됨

홍정모의 따라하며 배우는 C언어

int(*ptr_arr)[3]; 위 형태가 int [3] 의 배열을 가리키는 포인터라는 것은 이해했습니다. int arr[3] = { 1, 2, 3 }; int* ptr_arr_1 = arr; printf("%d\n", ptr_arr_1[1]); // 1) int (*ptr_arr_2)[3] = arr; printf("%d\n", ptr_arr_2[0]); // 2) printf("%d\n", ptr_arr_2[0][1]); // 3) printf("%d\n", (*ptr_arr_2)[1]); // 4) 1)의 경우 지금까지 써왔기 때문에 왜 arr 의 1번째 요소가 나오는지 이해했습니다. 2)의 경우 printf 함수 인수가 int [3] 이라는 경고가 나오고 3), 4)의 경우 arr 의 1번째 요소가 출력되는 것을 확인했습니다. int* ptr_arr_1 = arr; 은 1번 의 배열 역참조 연산으로 배열 요소의 값에 접근할 수 있지만 int (*ptr_arr_2)[3] = arr; 은 2번 의 배열 역참조 연산으로 배열 요소의 값이 접근할 수 있는 것 같은데 가리키는 배열이 똑같은 1차원 배열 인데도 왜 이런 차이가 발생하는 걸까요..??

  • c
쉽지않네 댓글 1 좋아요 2 조회수 333

오류에 conn is null 이라고 떠요

미해결

JSP 강의평가 웹 사이트 개발하기

실행하면 오류나면서 Cannot invoke "java.sql.Connection.prepareStatement(String)" because "conn" is null 이라고 뜨는데 구글 서치 해봐도 안되네요ㅠㅠ

  • java
  • jsp
hellohallo 댓글 1 좋아요 0 조회수 1152

char str[]과 char * str 의 차이는 무엇인가요?

미해결

홍정모의 따라하며 배우는 C언어

22:16초에서 char str[]을 쓰시는데 평소에 []이런식으로 안에 아무것도 할당되어있지 않은 배열의 역할과 포인터와의 차이가 너무 궁금해서 질문드립니다. 포인터 알기를 겉핥기로 알고있어서요. 감사합니다!

  • c
홍진기 댓글 1 좋아요 1 조회수 477

swap 함수 작성하기

해결됨

홍정모의 따라하며 배우는 C언어

홍 선생님께선 swap 함수에서 temp를 선언하실 때 정수형 자료형으로 선언하셨는데 저는 정수형 포인터 변수로 선언하고자 했어요. void swap(int* a, int* b) { int* temp = NULL; *temp = *a; *a = *b; *b = *temp; } 이렇게 함수를 작성해서 코드를 실행하려고 하는데 빌드는 성공했지만 실행은 실패했어요. 다만 함수를 아래처럼 고치면 정상적으로 작동하더군요. void swap(int* a, int* b) { int c; int* temp = &c; *temp = *a; *a = *b; *b = *temp; } 혹시 첫 번째 코드에서 temp 변수의 주소를 NULL로 초기화 한 부분이 문제였을까요?

  • c
  • 포인터
  • swap
정인식 댓글 1 좋아요 1 조회수 386

배열의 이중포인터

미해결

홍정모의 따라하며 배우는 C언어

안녕하세요 학습중 개념에 혼동이 생겨 질문글을 남깁니다. 강의는 10.13, 4분 18초 쯤입니다. 예컨대 *(*(parr + 1) + 2) 가 있다 하면 이것이 어떤 값을 나타내는지 그 과정 중에서 혼란스러운 부분이 몇 개 있습니다. 질문과 더불어 제가 잘못 설명하는 부분이 있으면 지적해주시면 감사하겠습니다. parr + 1 는 포인터parr 배열의 2번 째 원소( arr[1] )의 첫 주소, 즉 4의 주소를 가리키는 포인터입니다. 한편, * 라는 기호는 포인터변수에 저장된 주소에 접근하여 그쪽에 저장된 데이터를 들고오는 역참조의 기능을 수행케 합니다. 그렇다면 * 이 붙은 *(parr + 1) 에서는 4의 주소로 접근하여 * 에 의해 4라는 값을 역참조해오게 됩니다. 하지만 그러면 *(4 + 2) 가 되는데 이는 전혀 말이 안 되고 본래의 +2 는 포인터의 산술연산을 위한 것이기에 *(parr + 1) 는 모종의 포인터가 돼야 하고 강의 중에서도 교수님이 그렇게 말씀하셨습니다. (제가 오해하고 있는 부분과 달리 가장 밖에 있는 * 는 실제로 역참조의 기능을 가지는 것이 자명한데도요...) 그래서 정리하자면 *(parr + 1) 는 어떤 주소를 나타내것인지 아니면 모종의 포인터를 의미하는 건지 궁금하며 그리고 *(*(parr + 1) + 2) 의 전체적인 플로우를 정확하게 이해하고 싶습니다. 감사합니다.

  • c
Echapper4 댓글 1 좋아요 2 조회수 371

메모리 맵 파일강의 숙제 검사

해결됨

Windows 시스템 프로그래밍 - 기본

안녕하세요 선생님. 메모리 맵 파일강의 에서 내주신 숙제를 풀어 봤는데, 혹시 검사 부탁드려도 될까요? 아래의 코드가 제가 작성한 코드인데 혹시 잘못된 부분이나 고치면 좋겠다 하는 부분을 알려주시면 대단히 감사하겠습니다. 그리고 따로 질문 사항이 아래와 같이 있습니다. 메모리 맵 방식이 WriteFile() 방식보다 쓰기 속도가 더 빠를까요? chunkSize를 높여서 한번에 wirte하면 더 빠르다 강의에서 하셨는데, 어떠한 기준으로 메모리 효율이나 쓰기속도를 고려한 chunkSize의 최적의 사이즈를 구할수 있을까요? 항상 좋은 강의 만들어 주셔서 감사합니다! #include <iostream> #include <windows.h> // Custom deleter for HANDLE struct HandleDeleter { void operator()(HANDLE handle) { if (handle != INVALID_HANDLE_VALUE) { CloseHandle(handle); } } }; typedef std::unique_ptr<std::remove_pointer<HANDLE>::type, HandleDeleter> UniqueHandle; int main() { _wsetlocale(LC_ALL, L"korean"); const wchar_t* sourceFilePath = L"C:\\TEST\\Sleep Away.zip"; const wchar_t* targetFilePath = L"C:\\TEST\\Sleep Away - copy.zip"; // Open source file UniqueHandle hFileSource{ CreateFile(sourceFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL) }; if (hFileSource.get() == INVALID_HANDLE_VALUE) { wprintf(L"Failed to open source file [ERROR CODE: %d]\n", GetLastError()); return 0; } // Open target file UniqueHandle hFileTarget{ CreateFile(targetFilePath, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) }; if (hFileTarget.get() == INVALID_HANDLE_VALUE) { wprintf(L"Failed to open target file [ERROR CODE: %d]\n", GetLastError()); return 0; } // Set the size of the target file to match the source file LARGE_INTEGER fileSize; GetFileSizeEx(hFileSource.get(), &fileSize); if (!SetFilePointerEx(hFileTarget.get(), fileSize, nullptr, FILE_BEGIN) || !SetEndOfFile(hFileTarget.get())) { wprintf(L"Failed to set size of target file [ERROR CODE: %d]\n", GetLastError()); return 0; } // Create file mappings UniqueHandle hMapSource{ CreateFileMapping(hFileSource.get(), NULL, PAGE_READONLY, 0, 0, NULL) }; UniqueHandle hMapTarget{ CreateFileMapping(hFileTarget.get(), NULL, PAGE_READWRITE, 0, 0, NULL) }; if (hMapSource.get() == nullptr || hMapTarget.get() == nullptr) { wprintf(L"Failed to create file mappings [ERROR CODE: %d]\n", GetLastError()); return 0; } // Constants for the operation const DWORD chunkSize = 65536; // 64 KB DWORD bytesCopied = 0; for (LONGLONG offset = 0; offset < fileSize.QuadPart; offset += chunkSize) { DWORD size = static_cast<DWORD>(min(static_cast<LONGLONG>(chunkSize), fileSize.QuadPart - offset)); // Map a chunk from the source file auto pSrc = static_cast<char*>(MapViewOfFile(hMapSource.get(), FILE_MAP_READ, 0, offset, size)); if (pSrc == nullptr) { wprintf(L"Failed to map view of source file [ERROR CODE: %d]\n", GetLastError()); break; } // Map a chunk to the target file auto pDst = static_cast<char*>(MapViewOfFile(hMapTarget.get(), FILE_MAP_WRITE, 0, offset, size)); if (pDst == nullptr) { wprintf(L"Failed to map view of target file [ERROR CODE: %d]\n", GetLastError()); UnmapViewOfFile(pSrc); break; } // Copy the chunk memcpy(pDst, pSrc, size); bytesCopied += size; wprintf(L"%I64d%%\n", offset * 100 / fileSize.QuadPart); // Unmap the chunks UnmapViewOfFile(pSrc); UnmapViewOfFile(pDst); } wprintf(L"Copy complete! The original file size is %lld bytes and %d bytes copied.\n", fileSize.QuadPart, bytesCopied); return 0; }

  • c
  • system-programming
  • vc++
박경훈 댓글 1 좋아요 0 조회수 280

오버라이딩 된 메서드는 항상 우선권을 가진다.

미해결

김영한의 실전 자바 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. 해당 부분들을 공부하면서 제 자신의 정리가 확실하지 않아서 여쭤보고 싶습니다. 오버라이딩 된 Child.method()가 아닌 Parent.method()를 받으려면 super와 부모클래스의 업캐스팅을 통하여 해결하면 되다고 이해하면 될지 여쭤봅니다.

  • java
  • 객체지향
백암순댓국 댓글 1 좋아요 0 조회수 531

stack 쌓는 순서

해결됨

독하게 되새기는 C 프로그래밍

안녕하세요. 우분투 disas main으로 어셈블리어로 stack 이 어떻게 쌓는지 공부하는 중인데요. 어셈블리어로 연산코드가 mov라서 제 해석이 틀린건가요? 지역변수는 선언한 순서로 Push된다고 이해했는데 실제로 해보니 달라서 질문드립니다. int type으로 정의한 $0x1, -0x30에서 주소가 -0x3a로 멀어져서 이해가 안돼서 질문 드렸습니다. 그 이후 부터는 stack이 하나씩 지워지면서 rbp 포인터로 가까워 지는 모양으로 이해했는데 char 형태에서 오히려 더 밀려나서 주소가 왜 밀린건지 이해가 되지않습니다. 물론 함수 호출이 아닌 변수를 정의한 거지만 결은 비슷할 거라 생각이 들어서 질문 드립니다. 너무 궁금해서 엉뚱한 질문이지만 알려주시면 감사합니다...

  • c
  • kernel
  • secure-coding
ㅇㄴㄹ(ㅇㅀ) 댓글 1 좋아요 0 조회수 532

디버깅 관련 질문

미해결

홍정모의 따라하며 배우는 C언어

#include <stdio.h> #include <ctype.h> #include <stdbool.h> #define STOP '.' int main() { char c; int n_chars = 0; int n_lines = 0; int n_words = 0; bool word_flag = false; bool line_flag = false; printf("Enter text :\n"); while((c = getchar()) != STOP){ if(!isspace(c)){ n_chars++; } if(!isspace(c) && !line_flag){ n_lines++; line_flag = true; } if(c == '\n'){ line_flag = false; } if(!isspace(c) && !word_flag){ n_words++; word_flag = true; } if(isspace(c)){ word_flag = false; } } printf("Charaters = %d, Words = %d, Lines = %d\n", n_chars, n_words, n_lines); return 0; } 강의 내용 예제 코드인데 문자로 입력해야 디버깅이 가능한 예제 코드들은 어떻게 디버깅 하는지 알 수 있을까요??

  • c
cksgur 댓글 1 좋아요 1 조회수 201

no frameworks detected

해결됨

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

no frameworks detected 의 문구가 뜹니다 . 아래와 같이 선택할 수 있는 창이 뜨지않습니다. 위를 무시하고 create를 누르면 아래와 같이 나옵니다 ㅜㅜ

  • java
  • 객체지향
댓글 1 좋아요 1 조회수 371

인스턴스 타입을 부모로해도 자식의 오버라이드 메서드가 호출되나요?

해결됨

김영한의 실전 자바 - 기본편

안녕하세요! ElectricCar electricCar = new ElectricCar(); electricCar.move(); 이렇게 하면 호출한 electricCar 의 타입은 ElectiricCar 라서 인스턴스 내부의 ElectricCar 타입에서 시작한다고 하셨습니다. 그래서 electricCar.move(); 를 실행하면 ElectricCar 의 move() 메서드가 실행돼서 전기차를 빠르게 이동합니다. 이렇게 전기차로 출력이 됩니다. Car electricCar = new ElectricCar(); electricCar.move(); 그럼 이렇게 타입이 Car 타입이면 인스턴스 내부의 Car 타입에서 move() 메서드를 실행시켜 "차를 이동합니다."가 출력될 것이라고 생각했는데 전기차를 빠르게 이동합니다. 여기서도 전기차를 빠르게 이동합니다.가 출력됩니다. 어째서 Car 타입에서 move() 메서드를 실행하지 않고 ElectricCar 의 move() 메서드를 실행하게 되는건가요? 감사합니다!! 😊

  • java
  • 객체지향
  • 상속
  • 오버라이딩
노뚜 댓글 1 좋아요 0 조회수 538

포인터 배열의 메모리 추적

해결됨

독하게 시작하는 C 프로그래밍

이 코드에서 궁금한 사항이 있어 질문 드립니다. 우선 astrList, astrList[0], astrList[0][0] 각각을 메모리 주소 검색을 하였더니 순서대로 astrList 의 경우 astrList[0] 의 경우 astrList[0][0] 의 경우 이렇게 나왔는데 astrList의 주소는 변수 자체의 주소이고, astrList[0] 의 주소는 'Hello' 중 H의 주소를 가리키고 astrList[0][0] 의 주소 또한 H의 주소를 가리키는게 맞지 않을까요? 왜 astrList[0][0] 의 주소는 저런식으로 나오는지 모르겠습니다... 0x48이 H인 것은 알겟지만 왜 주소에 그 값이 들어가는지도 이해가 가지 않습니다 ㅠㅠ 그리고 astrList의 주소를 검색했을 때 나오는 맨 위 3줄에 대해서도 잘 이해가 가지 않습니다... 글이 매끄럽지 못한 점 양해부탁드리겠습니다!

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
psbtyu123 댓글 1 좋아요 0 조회수 316

자바 추후 중급 고급 영상 문의

해결됨

김영한의 실전 자바 - 기본편

안녕하세요 영한님! 실전 자바 기본편 잘 보고 있습니다. 혹시 추후에 자바 중급 고급편에 가변객체 불변객체 사용이유(스레드와 연관되면서..)와 리플렉션(스프링과 연결되면서...)이 혹시 나오는지 궁금합니다

  • java
  • 객체지향
  • 리플렉션
  • 가변/불변객체
한나라 댓글 1 좋아요 0 조회수 508

/actuator/refresh 가 동작하지 않습니다.

미해결

Java 마이크로서비스(MSA) 프로젝트 실습

안녕하세요~ 강의를 듣다가 제가 뭔가 잘못한건지 actuator에 refresh가 동작하지 않아 질문글을 남깁니다. 강의 2-10번 DB 비밀번호 암호화까지 문제 없이 잘 진행하다 재가동 없이 설정파일 갱신하는 부분을 진행하는데 item-service에서 build.gradle에 의존성 추가하고 bootstrap.yml에 설정 옵션 추가했는데 config-server 설정 파일 변경 후 postman 에서 refresh 요청을 날려도 response body 에는 [] 빈 배열만 찍히고 별다른 문구가 없고 변경된 설정이 적용되지 않더라고요 강의를 봐도 크게 설정하는 부분이 많은건 아니어서 잘 적용된 것 같은데 작동하지 않는 원인이 콘솔에 찍히지 않아서 헤메고 있습니다. build.gradle 의존성과 bootstrap.yml 에 설정 추가하고 config-server 실행시키고 item-service 실행시킨 후 설정 파일에 변경점을 주고 localhost:5000 번으로 /actuator/refresh 요청을 날렸습니다. 그리고 물품등록 요청을 보내서 200코드 성공했는데 별도의 logs 폴더에 api-local2.log는 생기지 않았습니다. 강의와 다르게 한건 인텔리제이로 프로젝트 구성한 것과 스프링부트 마이너 버전만 달라서 크게 문제가 있지는 않을 것 같은데.. 2-10 강의까지 해본 깃 주소도 올려봅니다. https://github.com/doyoun8813/Microservice

  • java
  • spring
  • rest-api
  • spring-boot
  • msa
권도윤 댓글 3 좋아요 2 조회수 737

반복문 리팩토링 질문드립니다.

해결됨

김영한의 실전 자바 - 기본편

안녕하세요 영한님! 질문은 처음 드리는거 같습니다~ 기본형과 참조형 '문제와 풀이' 시간에 ProductOrder를 리팩토링하는 부분에서 질문이 있습니다. 리팩토링 하는 과정에서 for문 안에서 수행하던 print와 totalAmount를 계산하는 로직을 각각 메서드로 나누었는데요, 이렇게 되면 한번만 수행되던 반복문이 메서드로 나누면서 각각 수행되어 2번이 되는데 이런 부분은 for문이 한번 더 돌게되어 오는 성능이슈보다, 깔끔하게 리팩토링 되는 부분이 더 이점이 큰 부분일까요? 사실 현업에서 업무를 할때도, for안에서 여러가지 로직이 수행되면 한번에 파악하기가 어려워서 나눠야지 싶어서 나누었지만, 한번만 돌던 반복문이 여러번 돌게 될 수 있어서 망설여지는 부분이 있었습니다. 이 부분 질문드립니다! 감사합니다~

  • java
  • 객체지향
  • 리팩토링
suco 댓글 1 좋아요 1 조회수 529

혼자서 푼 문제 확인 부탁드립니다.

미해결

자바 코딩테스트 - it 대기업 유제

import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; class 방향바꾸기 { public int solution(int[][] board) { int answer = 0; /** * n * m 격자판 지도정보 * 격자판에는 각 1,2,3,4 의 값이 존재 * 1: 오른쪽의 인접한 격자로 이동 * 2. 왼쪽의 인접한 격자로 이동 * 3: 아래로 이동 * 4: 위로 이동 * 0,0부터 오른쪽 아래 맨 끝으로 이동하려고함 * board가 주어지면 목표지점까지 가기위해 방향을 바꾸는 최소 격자 개수 * 한 격자의 방향은 원하는 방향으로 한번만 바꾸기 가능 * * * */ //다익스트라로 인접 순회 할때마다 내가 그 격자를 바라보고있는지 확인 //내가 그 격자를 바라보고있으면 1추가 안함 , 바라보지 않으면 1 추가 int[] dx = {-1, 0, 1, 0}; int[] dy = {0, -1, 0, 1}; PriorityQueue<Candidate> queue = new PriorityQueue(); Map<String, Integer> minPosMap = new HashMap<>(); for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[i].length; j++) { minPosMap.put(j + ":" + i, Integer.MAX_VALUE); } } Pos first = new Pos(0, 0); //첫번째 시작을 넣는다. queue.add(new Candidate(first, 0)); while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { Candidate candidate = queue.poll(); Pos pos = candidate.pos; if (pos.x == board[0].length - 1 && pos.y == board.length - 1) { // print(board, minPosMap); return candidate.cnt; } for (int j = 0; j < 4; j++) { int moveX = dx[j] + pos.x; int moveY = dy[j] + pos.y; if (moveX < 0 || moveY < 0 || moveX >= board[0].length || moveY >= board.length) continue; //현재 Pos 가 moveX, moveY 를 바라보고 있는지 체크 boolean isLookAt = isLookAt(board[pos.y][pos.x], pos, moveX, moveY); //바라보면 cnt 그대로 바라보지 않으면 cnt++ //내가 추가할 값이 기존에 있는 값보다 작아야함 Pos newPos = new Pos(moveX, moveY); int cnt; if (isLookAt) { cnt = candidate.cnt; } else { cnt = candidate.cnt + 1; } Integer baseCnt = minPosMap.get(newPos.getName()); if (cnt < baseCnt) { minPosMap.put(newPos.getName(), cnt); Candidate newCandi = new Candidate(newPos, cnt); queue.add(newCandi); } } } } return answer; } private static void print(int[][] board, Map<String, Integer> minPosMap) { int cnt = 0; for (Integer value : minPosMap.values()) { System.out.print(value + " "); cnt++; if (cnt % board[0].length == 0) System.out.println(); } } private boolean isLookAt(int direction, Pos pos, int moveX, int moveY) { int x = pos.x; int y = pos.y; // * 1: 오른쪽의 인접한 격자로 이동 // * 2. 왼쪽의 인접한 격자로 이동 // * 3: 아래로 이동 // * 4: 위로 이동 int[][] directionCalculate = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; return y + directionCalculate[direction - 1][0] == moveY && x + directionCalculate[direction - 1][1] == moveX; } class Pos { int x; int y; public Pos(int x, int y) { this.x = x; this.y = y; } public String getName() { return x + ":" + y; } } class Candidate implements Comparable<Candidate> { Pos pos; int cnt; public Candidate(Pos pos, int cnt) { this.pos = pos; this.cnt = cnt; } @Override public int compareTo(Candidate o) { return cnt - o.cnt; } } public static void main(String[] args) { 방향바꾸기 T = new 방향바꾸기(); System.out.println(T.solution(new int[][]{{3, 1, 3}, {1, 4, 2}, {4, 2, 3}})); System.out.println(T.solution(new int[][]{{3, 2, 1, 3}, {1, 1, 4, 2}, {3, 4, 2, 1}, {1, 2, 2, 4}})); System.out.println(T.solution(new int[][]{{3, 2, 1, 3, 1, 2}, {2, 1, 1, 1, 4, 2}, {2, 2, 2, 1, 2, 2}, {1, 3, 3, 4, 4, 4}, {1, 2, 2, 3, 3, 4}})); System.out.println(T.solution(new int[][]{{3, 2, 1, 3, 1, 2, 2, 2}, {2, 1, 1, 1, 4, 2, 1, 1}, {2, 2, 2, 1, 2, 2, 3, 4}, {1, 3, 3, 4, 4, 4, 3, 1}, {1, 2, 2, 3, 3, 4, 3, 4}, {1, 2, 2, 3, 3, 1, 1, 1}})); System.out.println(T.solution(new int[][]{{1, 2, 3, 2, 1, 3, 1, 2, 2, 2}, {1, 2, 2, 1, 1, 1, 4, 2, 1, 1}, {3, 2, 2, 2, 2, 1, 2, 2, 3, 4}, {3, 3, 1, 3, 3, 4, 4, 4, 3, 1}, {1, 1, 1, 2, 2, 3, 3, 4, 3, 4}, {1, 1, 1, 2, 2, 3, 3, 1, 1, 1}})); } } AI로 답변을 달아주시는 것 같은데 이번에도 확인 부탁드립니다. 해설을 보면 강사님이랑 풀이방식은 비슷한것같습니다.

  • java
  • 코딩-테스트
이승환 댓글 1 좋아요 0 조회수 189

인기 태그

인프런 TOP Writers

주간 인기글