강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

김태윤님의 프로필 이미지
김태윤

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

5-U

5-U 드래곤 커브 질문

작성

·

476

·

수정됨

0

안녕하세요 큰돌님

드래곤 커브 질문입니다.

저는 이 문제에서 회전에 대한 설명이 있는 것을 보고

2차원 좌표계를 이용해 여태까지 만들어진 좌표를 가장 최신의 점을 중점으로 평행이동 후 변환 좌표계 연산 후 다시 평행 이동하는 방법을 사용했습니다. 하지만 너무 오래 걸렸고 테스트 케이스도 실패해서 강의에 설명을 보니 정말 간단하게 규칙을 찾아서 풀으셨더라구요.

혹시 코딩테스트 문제에서 좌표계 transform을 사용하는 문제가 나올 수도 있는지 궁금해서 질문드립니다.

http://boj.kr/46fef7422bd649c4a63eaa73da33af4c

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 태윤님 ㅎㅎ

고생 좀 하셨네요.. ㅎㅎ

일단.. 문제에 좌표연산은 나오기도 하지만 코테 수준에서는 절대 안 나옵니다.

그래도 좀 더 자세히 설명하자면 다음과 같습니다.

좌표연산은 대표적으로 다음과 같습니다.

  • 벡터연산(단위벡터를 만들어서 2차원 또는 3차원 좌표를 곱셈 등을 이용해 진행)

  • 벡터 내적 다음 그림을 참고해주세요.

image

이 수준은 정말 구현하기가 쉽습니다. 그냥 곱하기 더하기만 하면 되는 것이죠.

 

근데 태윤님의 코드처럼. 중심점 잡아서 돌리는 것도 있긴 한데요. 사실 코드 만들기가 제일 빡세긴해요..

        newY = rotateY + lastP.first;
        newX = rotateX + lastP.second;

알고리즘 문제중에서 가장 어려운 문제는 "기하"입니다. 근데 이런 기하문제조차 문제가 100이라고 했을 때 90은 기하인 척하는 "규칙찾기"문제가 많습니다. (이런 기하 문제를 만들기가 힘들기 때문에 그래요. 상위 0.1%를 위한 문제가 기하다라고 생각하시면 되요.)

되도록 규칙을 찾을 수 있다면 규칙을 찾아서 하는 것이 좋습니다.

참고로 C++에서 transform이라는 함수도 있습니다. 이는 이터러블한 객체를 대상으로 "전체적" 또는 "부분적"으로 어떠한 함수를 적용시킬 수 있는데요. 브로드캐스팅할 때 쓰일 수도 있습니다. (근데 코테에는 절대 안 나올거에요)

#include<bits/stdc++.h>
using namespace std; 
string str = "Hello Kundol";
int main() { 
    transform(str.begin(), str.end(), str.begin(), ::toupper);
    cout << str;
    
    return 0;
}
// HELLO KUNDOL

 

김태윤님의 프로필 이미지
김태윤
질문자

답변 감사합니다!!

김태윤님의 프로필 이미지
김태윤

작성한 질문수

질문하기