728x90
반응형

안녕하세요 이번 포스팅은 바로

백준 알고리즘 1004번(자바)

문제입니다



문제

어린 왕자는 소혹성 B-664에서 자신이 사랑하는 한 송이 장미를 위해 살아간다. 어느 날 장미가 위험에 빠지게 된 것을 알게 된 어린 왕자는, 장미를 구하기 위해 은하수를 따라 긴 여행을 하기 시작했다. 하지만 어린 왕자의 우주선은 그렇게 좋지 않아서 행성계 간의 이동을 최대한 피해서 여행해야 한다. 아래의 그림은 어린 왕자가 펼쳐본 은하수 지도의 일부이다.




빨간 실선은 어린 왕자가 출발점에서 도착점까지 도달하는데 있어서 필요한 행성계 진입/이탈 횟수를 최소화하는 경로이며, 원은 행성계의 경계를 의미한다. 이러한 경로는 여러 개 존재할 수 있지만 적어도 3번의 행성계 진입/이탈이 필요하다는 것을 알 수 있다.

위와 같은 은하수 지도, 출발점, 도착점이 주어졌을 때 어린 왕자에게 필요한 최소의 행성계 진입/이탈 횟수를 구하는 프로그램을 작성해 보자. (행성계의 경계가 맞닿거나 서로 교차하는 경우는 없다고 가정한다. 또한, 출발점이나 도착점이 행성계 경계에 걸쳐진 경우 역시 입력으로 주어지지 않는다.)


입력

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주어지며, 세 번째 줄부터 n줄에 걸쳐 행성계의 중점과 반지름 (cx, cy, r)이 주어진다. 입력제한은 다음과 같다. (-1000 ≤ x1, y1, x2, y2, cx, cy ≤ 1000, 1 ≤ r ≤ 1000, 1 ≤ n ≤ 50)

좌표와 반지름은 모두 정수이다.


출력

각 테스트 케이스에 대해 어린 왕자가 거쳐야 할 최소의 행성계 진입/이탈 횟수를 출력한다.


예제 입력


예제 출력


문제풀이

이번 1004번 문제는 앞서 풀었던 1002번 문제랑 비슷하다고 보시면 됩니다.



문제에서 두가지 가정을 주었습니다.
하나는 경계가 맞닿거나 서로 교차하는 경우가 없다고 가정한거고
또 다른 하나는 출발점이나 도착점이 경계에 걸쳐진 채로 입력이 주어지지 않는다고 가정했습니다.
이 의미는 출발점이나 도착점이 행성계에 속하지 않는다면 통과되지 않고 갈 수 있다고 보시면 됩니다.


 

<출발점이 행성계 안 & 도착점이 행성계 밖에 있을 경우>

출발점이 행성계 안에 있으면 도착점으로 어떤 방향으로 가든
행성계 이탈이 필수적으로 나타날 수 밖에 없습니다.

x1,y1이 출발점 좌표라고 가정하고 cx,cy,r이 행성계 좌표 및 반지름 이라고 가정하면

Math.pow(x1 - cx, 2) + Math.pow(y1 - cy, 2) < Math.pow(r, 2)

이런 식에 조건 식 코드를 구현할 수 있습니다.




<출발점이 행성계 밖 & 도착점이 행성계 안에 있을 경우>


도착점이 행성계 안에 있으면 출발점에서 도착점으로 어떤 방향으로 가든
행성계 집입이 필수적으로 나타날 수 밖에 없습니다.

x2,y2이 도착점 좌표라고 가정하고 cx,cy,r이 행성계 좌표 및 반지름 이라고 가정하면

Math.pow(x2 - cx, 2) + Math.pow(y2 - cy, 2) < Math.pow(r, 2)

이런 식에 조건 식 코드를 구현할 수 있습니다.





<출발점이 행성계 안 & 도착점이 행성계 안에 있을 경우>


출발점이 행성계 안에 있고 도착점도 같은 행성계 안에 있으면 어떤 방향으로 가든
행성계 진입/이탈이 일어나지 않을 수 있습니다.

x1,y1이 출발점 좌표 그리고 x2,y2가 도착점 좌표라고 가정하고
 cx,cy,r이 행성계 좌표 및 반지름 이라고 가정하면

Math.pow(x2 - cx, 2) + Math.pow(y2 - cy, 2) < Math.pow(r, 2)
 &&
Math.pow(x1 - cx, 2) + Math.pow(y1 - cy, 2) < Math.pow(r, 2)


이런 식으로 앞서 사용한 조건 두개를 and문으로 묶어 조건 식 코드를 구현합니다.




<출발점,도착점이 행성계 밖에 있을 경우>

출발점이랑 도착점이 행성계 밖에 있다면 위에 그림과 같이 어떻게든 돌아갈 수 있기 때문에
별도의 행성계 진입/이탈을 하지 않아도 가능합니다.

또한 앞서 만들어 놓은 조건식에 else로 두면 되기 때문에

별도의 조건식 코드를 만들지 않아도 됩니다. 


최종코드


if문에는 같은 행성계 안에 출발점과 도착점이 모두 있을 경우

else if문에는 출발점만 행성계 안에 있을 경우와 도착점만 행성계 안에 있을 경우를 적어

위에 보이는 코드처럼 작성해줍니다.






느낀점

기존의 1002번 문제를 해결할 때 공부했던 좌표사이의 거리 공식을 이용하면

1004번 문제의 코드는 어렵지 않게 작성할 수 있었다.

하지만 이 문제는 처음 문제를 봤을 때 이해하는데 시간이 조금 걸렸다.






반응형
728x90
반응형

안녕하세요 이번 포스팅은 바로

백준 알고리즘 1003번(자바)

문제입니다


문제


다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다.








fibonacci(3)을 호출하면 다음과 같은 일이 일어난다.

●fibonacci(3)fibonacci(2)fibonacci(1) (첫 번째 호출)을 호출한다.

●fibonacci(2)fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다.

두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다.

●fibonacci(0)은 0을 출력하고, 0을 리턴한다.

●fibonacci(2)fibonacci(1)fibonacci(0)의 결과를 얻고, 1을 리턴한다.

첫 번째 호출한 fibonacci(1)은 1을 출력하고, 1을 리턴한다.

●fibonacci(3)fibonacci(2)fibonacci(1)의 결과를 얻고, 2를 리턴한다.

1은 2번 출력되고, 0은 1번 출력된다. N이 주어졌을 때, fibonacci(N)을 호출했을 때, 0과 1이 각각 몇 번 출력되는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. N은 40보다 작거나 같은 자연수 또는 0이다.

출력

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

예제 입력




















예제 출력



문제풀이

이 문제는 두 가지 방법으로 나눠서 풀 수 있습니다.

- 방법 1 : 호출 시 카운트(시간초과 문제 발생)

fibonacci(0)이 호출될 때 zero_cnt++ 해주고 fibonacci(1)이 호출될 때 one_cnt++를 해줍니다.

이렇게 하면 문제에서 원하는 것 처럼 fibonacci(0),fibonacci(1) 호출 수를 알 수 있고 이를 그대로 출력해주면 됩니다.



위의 코드처럼 카운트 해주시면 이클립스에서는 문제없이 돌아가지만 백준 사이트에서는 시간초과가 날 가능성이 높습니다.

왜냐하면 이 방식은 시간이 오래걸린다는 단점이 있습니다. 그 이유는 0,1의 호출 수를 알기 위해 피보나치 함수를 계속 이용해야 한다는 점인데

이렇게 된다면 N의 값이 커지면 커질수록 피보나치 함수의 호출 수는 훨씬 더 많아지고 이로 인해 시간을 많이 잡아먹을 수 밖에 없습니다.

이를 해결하기 위해서 다른 방법을 이용해야 합니다.

-방법 2 : 규칙 찾기( 1. Scanner(시간초과) 2. BufferedReader)

n을 0부터 시작해서 1씩 값을 올려 결과를 얻으면 아래처럼 일정한 규칙이 보이게 됩니다.

n(0) -> zero[0] = 1 , one[0] = 0

n(1) -> zero[1] = 0 , one[1] = 1

n(2) -> zero[2] = 1 , one[2]= 1

n(3) -> zero[3] = 1 , one[2] = 2

n(4) -> zero[4] = 2 , one[3] = 3

n(5) -> zero[5] = 3 , one[3] = 5

이러한 규칙들을 정리해보면

zero[n] = zero[n-1] + zero[n-2]

one[n] = one[n-1]+one[n-2]

위와 같은 규칙으로 정리할 수 있는데 이렇게 정리된 규칙을 이용한다면

시간이 많이 걸릴 fibonacci 함수를 계속 쓰지 않아도 원하는 값을 구할 수 있습니다.



이러한 규칙을 이용하기 위해

0,1의 호출 수를 저장하기 위한 배열 선언을 해줍니다.

그리고 나서 zero,one의 첫번째 두번째 인덱스 값을 넣어주는데 이렇게 먼저 집어 넣는 이유는 [n] = [n-1]+[n-2]이기 때문입니다.



정리해서 코드를 짜면 위와 같이 나옵니다.

이렇게 풀고 내면






시간초과가 나옵니다.

이유는 바로 Scanner 입니다.

Scanner를 사용하면 쉽게 풀 수 있지만 Scanner를 사용하면 시간이 많이 걸린다는 단점이 있습니다.

이를 해결하기 위해서 Scanner 대신 BufferedReader,Writer를 이용합니다.


이를 BufferedReader,Writer로 해결하면 위에 보이는 코드처럼 정리할 수 있습니다.

느낀점

이때까지 scanner만 사용했는데 scanner가 시간이 많이 잡아먹는 지는 몰랐다.

scanner 대신 bufferedreader,writer로 시간이 얼마 걸리지 않을 수 있다는 것도 알 수 있었고

reader,writer를 사용하는 방법도 알 수 있었다.





















반응형
728x90
반응형


안녕하세요 이번 포스팅 주제는


 토트넘vs브렌트포트

입니다.

이번 경기는 앞서 2020.01.06 04:45분에 진행되었습니다.

특히 이번 경기는 카라바오컵 준결승 경기이기에 토트넘 입장에서도 중요한 경기였습니다.

이러한 경기에서 손흥민 선수가 1대0으로 이기는 중에 1골 더 넣으며 쐐기를 박았습니다.


경기 내용 

경기 시작 12분 경 레길론이 올린 크로스를 시소코가 헤딩으로 골로 마무리했습니다.

시소코의 골로 토트넘이 1대0으로 앞선채로 경기가 진행됩니다.

그 후 브렌트포트의 세트피스로 계속 토트넘의 골대를 두드렸습니다.

전반이 마무리되고 후반이 시작 후 63분 토니의 헤딩이 골대 안으로 들어갔지만 골이 취소되고 

다시 1대0으로 돌아와 토트넘이 앞서고 있습니다.

경기 시작 70분 은돔벨레의 패스를 받은 손흥민이 경기장 중간부터 침투해골을 넣습니다

이번 골로 토트넘은 2대0으로 멀리 달아납니다.

이번 골 역시 손흥민의 장점을 잘 보여준 경기였습니다.

경기장 하프 라인부터 뛰며 멋진 침투를 보여주고 정확한 골 결정력까지 보여주었습니다.  


경기 후 무리뉴 인터뷰


기자 Q) 

오늘 승리 축하드립니다. sonny의 또 다른 대단한 골이 나왔습니다. sonny와 경기를 마치고 이야기를 나눴는데

그는 그의 개인 기록보다 "팀이 항상 우선"이라 답했습니다.  

이러한 생각이 올 시즌 팀의 성격을 바꿔두었다고 보시는지?

무리뉴 A)

네 그거는 sonny의 능력입니다. 그게 그의 천성이죠.  

다른 선수들은 꼭 같지는 않아요. 그는 팀이 우선입니다. sonny나 케인 루카스 등 몇몇은 팀이 먼저이죠. 

우리는 특정 선수들의 특징에 의존하는데 sonny가 그런 선수들중 한명이죠. 

그는 좋은 기회들이 있었고 멋진 발리슛도 했습니다. 그게 골대 안에 들어간 줄 알았는데 볼이 밖에 나간걸 나중에야 알았죠

그리고 그는 어려운 경기를 하던 중 골키퍼를 상대했습니다. 여전히 경기 결과는 알 수 없었고 상대가 압박하며 시도하던 때였죠.  sonny가 그 순간 결승골을 넣었습니다.

이러한 점에서 그는 특별하고 저의 특별한 선수들 중 한명이기도 합니다.



경기 후 프랭크 인터뷰

기자 Q) 

오늘 저녁 경기 결과와 퍼포먼스는 어떠했나요?

프랭크 A)

졌을 땐, 실망스럽죠. 경기가 끝나고 시간이 지났지만 마음이 아프죠. 그리고 경기를 다시 돌아봤을 때 우리는 기회가 있었고 기회가 있을 것을 경기 전에도 알았습니다.

우리가 기회를 만드는 모습을 실제로 만들고 보여주기도 했구요. 보는 사람에 따라 다르겠지만 부족함 없이 토트넘을 상대로 70분 정도 잘 경쟁했다고 봅니다. 

동점골이 VAR을 통해 아쉽게 무효가 되었을 때 그 결과가 합당하다고 생각합니다.

우리는 좋은 태도와 용기를 가지고 플레이했고 압박도 했습니다. 똑똑했으며 세트피스 상황들에서 위협적이었죠.

그러나 두번째 골과 함꼐 프리미어리그의 퀄리티를 보여주었습니다. 

첫번째 골은 실망스러운 것이었습니다.

두번째 골에 대해서도 이야기하자면 그것은 남다른 클래스였습니다.

SON이 몇몇 수비수를 제치고 골대를 흔든 몇몇 다른 클럽들의 이름도 댈 수 있습니다.


토트넘 공식 트위터 및 반응

공식 트위터

트레이드마크

댓글 반응

호날두 마르셀로보다 낫다


사랑해!
근데 저 포즈 어떤 의미인 지 아는 사람 있어??

특별한 순간을 저장하는거야!!


월드클래스 그리고 우리 스쿼드에서 가장 중요한 선수야!!


 그는 누구의 SON도 아니야, 그는 우리의 SON이야!!

 이 남자를 좋아하지 않을 수 있어??

세계 최고!!

사랑해

사랑해 쏘니

그는 최고야!


마치며

이번 경기 역시 손흥민 선수의 월드클래스를 입증할 수 있는 경기가 아니였나 생각합니다.  

하프라인부터 엄청나게 빠른 속도와 침투 그리고 엄청나게 뛰어난 결정력을 보여주었습니다.

특히 무리뉴 감독이 손흥민 선수를 아껴주는 인터뷰를 볼 수 있습니다.

또한, 상대팀 감독인 프랭크 감독의 인터뷰에서 첫번째 골은 우리의 실수였지만 

두번째 골은 어떤 팀이라도 먹혔을 것이다라는 의미와 함꼐 손흥민 선수를 인정한다는 것도 볼 수 있었습니다.


토트넘은 이번 경기로 카라바오 컵 결승에 진출했습니다. 

결승 상대팀은 맨유와 맨시티의 경기 결과로 알 수 있습니다.


이상으로 읽어주셔서 감사합니다!!




반응형
728x90
반응형

안녕하세요 

이번 포스팅 주제는 

"메이플스토리 폭업사냥터 1~200"

입니다




추가 경험치 정리


경험축적의 비약 - 2시간 동안 경험치 10% 증가, 레벨제한 70 (획득처 : 경매장,연금술)


 

몬스터파크 익스트림 물약 - 30분간 경험치 10%증가,계정내에 교환 가능 (획득처 : 몬스터파크 코인 10개)


  

엘프의 축복 - 경험치 15%증가 ( 획득처 : 메르세데스 링크 스킬)


  

룬 퍼시스턴스 - 룬 지속시간 50% 증가(회득처 : 에반 링크 스킬)


  

각종 경험치 2배 3배 쿠폰들(획득처 : 데일리 기프트, 이벤트 및 MVP 보상) + 경뿌


 

정령의 펜던트 - 1시간 미만(10%증가) 2시간 미만(20% 증가) 3시간 이상(30%증가) (획득처 : 경매장,데일리기프트)



 

유니온 경험치 - 칸 당 0.25증가 (획득처 : 유니온)









폭업사냥터(2021년 1월 최신)



1~30 (깊어지는 숲 1,골렘사원,초록나무줄기)





 


엘로딘 : 깊어지는 숲의 경우 메이플 유명BJ들도 자주 사용하는 인기많은 사냥터입니다. 

개인 맵이라는 장점과 더불어 몹 젠율도 좋습니다.

단, 10부터 가기 위해선 텔레포트가 필요하다는 점과 유니온 및 링크가 없다면 원킬 컷이 안날 수 있습니다.



골렘의 사원의 경우 유니온, 링크가 없어도 쉽게 잡을 수 있다는 장점이 있습니다. 

물론 깊어지는 숲 보다 시간대비 효율이 좋지 않을 수 있지만 

무자본 및 막 시작하신 분들에게 추천드리는 방법입니다. 

골렘의 사원에서 20~24정도 넘기신다면 초록나무줄기로 가셔서 잡으시는 것을 추천드립니다. 




30~60(테마던전,와일드보어의 땅 ,제 1군영)


2차 전직 이후 테마던전 퀘스트가 들어오는데 맞춰서 원하시는 것을 하시면 됩니다.

특히 버닝이벤트에 참여한 캐릭의 경우 테마던전 하나만 클리어 해도 엄청나게 빨리 레벨을 올리실 수 있습니다.

이후 3차전직까지 부족한 레벨와일드보어나 군영에 가서 몬스터를 잡아주시면 됩니다. 




60~70(습지,하늘계단,이지자쿰)



캐릭터의 육성용 아이템을 착용하시고 유니온이 높다면 3차 전직이후 이지 자쿰을 잡아줍니다. 

많은 경험치를 얻을 수 있습니다. 만약 무자본 및 시작한 지 얼마되지 않으셨다면 나중에 잡으셔도 됩니다.


그 후 습지 및 하늘의 계단에서 사냥을 해주는데 이 사냥터들은 인기 사냥터이다 보니 

자리가 없을 경우가 종종 있습니다. 이럴 경우 습지 옆 맵에서 사냥하셔도 됩니다. 




70~80(얼음골짜기)


얼음골짜기의 경우 일자 맵이라는 장점이 있어 레벨 올릴 때 스쳐가기 좋은 맵입니다.

단, 유니온이나 육성용 아이템을 끼셨다면 넘어가셔도 됩니다.




80~100(사헬지대,C-2,관게자 외 출입금지,하늘둥지2)


사헬지대의 경우 좁은 일자 맵이라 사냥이 안 좋은 직업군에게도 엄청 좋은 효과를 보여줍니다.사냥이 좋은 직업군에게는 젠률이 못따라올 수 있습니다.


C-2의 경우 넓은 일자 맵을 보유하고 있어서 모든 직업군이 사냥하기 편한 장소입니다.


93~95부터 C-2의 히든 포탈 관계자 외 출입금지하늘 둥지2로 나뉘는데

하늘 둥지 2의 경우 무자본이나 유니온이 없으신 분들 한테는 잡기가 어렵습니다

하지만, 경험치는 스타포스 지역답게 엄청 많이 얻을 수 있습니다.



100~110 (기계실,하늘둥지2)

기계실의 경우 층으로 된 일자맵이라 예전부터 인기가 많은 사냥터입니다. 

무자본이나 유니온이 낮은 경우 좋은 사냥터입니다.



육성용 템이나 유니온이 높을 경우 하늘 둥지에서 더 잡으셔도 됩니다. 



110~120 (날카로운 절벽4,시계탑최하층)


날카로운 절벽4의 경우도 층으로 된 일자맵이라 사냥하기 좋은 맵입니다. 

맵 젠률도 좋아서 무자본이나 유니온 낮은 분들에게 좋습니다.



시계탑최하층유니온 높거나 육성용 템이 있을 경우 가시면 됩니다. 보통 시계탑 최하층에서 원하시는 곳에서 하시면 되는데 제가 추천하는 곳은 뒤틀린 시간의 길 <4>입니다. 

버닝필드도 있고 해서 좋습니다.



120~145 (아랫마을,시련의 동굴,용의둥지,검은 와이번의 둥지)


무자본이나 유니온이 낮은 분들은 아랫마을 까막산 입구에서 사냥하시다가 125가 되면 아랫마을에서 현상금 퀘스트를 깨줍니다. 경험치도 좋고 메소도 어느정도 줘서 괜찮습니다.

현상금 퀘스트를 더 이상할 게 없으시다면 도깨비 집에서 사냥해줍니다.


시련의 동굴,검은 와이번의 둥지,용의 둥지는 괜찮은 곳에서 사냥하시면 됩니다.

검은 와이번의 둥지는 많이 추천드리지는 않습니다.




140~160 (시간의 신전,망각의 길)


무자본 경우 시간의 신전에서 나중에 핑크빈 들어갈 수 있게 길 뚫기 퀘스트 하면서 레벨을 올려줍니다. 길 뚫기 퀘스트가 끝나면 망각의 길에서 사냥해줍니다.


어느정도 템이 갖춰져 있는 분들이라면 커닝타워 스타포스 지역이나 또 다른 망각의 길에서 사냥해줍니다. 둘 지역 다 사냥하기 좋은 장소여서 레벨 올리기에 좋습니다. 




 160~170 (파괴된 헤네시스,또 다른 망각의 길)


무자본의 경우 파괴된 헤네시스 시장에서 사냥해줍시다. 레벨이 잘 안올라서 힘드실 수 있습니다


템이 있으신 분들은 계속 망각의 길이나 커닝타워에서 사냥해줍시다.




 170~180 (지구방위본부,기사의 전당)

무자본 분들은 기사의 전당 1~5 중에 가장 괜찮은 곳에서 사냥하시면 됩니다. 

버닝필드라 경험치도 많이 줍니다.


템이 갖춰져있다면 지구방위본부 스타포스지역 가줍시다.

이 사냥터 역시 메이플 BJ들이나 유저들이 많이 사용하는 사냥터입니다. 




 180~200 (황혼의 페리온,스올길)


180부터는 황혼의 페리온 중에서 괜찮은 지역에 가셔서 사냥해주시면 됩니다. 가장 추천드리는 지역은 버려진 발굴지역2입니다. 몹 젠도 좋고 층으로 된 일자맵이라 좋습니다.


자본이 충분하고 템도 좋으시다면 190부터는 스올길을 추천드립니다. 

상하차 알바를 구해서 하시면 빠른 레벨업을 볼 수 있습니다.







이상으로 메이플스토리 폭업사냥터에 대해 알아봤습니다.

읽어주셔서 감사합니다!!





반응형

+ Recent posts