위와 같은 식을 인수분해 한다.


a ( 0 < a < 1500 )와 b ( b < 300000 ) 인 자연수가 주어진다.

불가능한 데이터가 주어질수도 있다.


출력

예시를 참고하시오

(x-p)(x-q)일때 p <= q이어야 한다.


풀이정리)

(x-p)(x-q)를 펴보았다. x2 -(p+q)x + pq로 펴진다.

p+q == a && pq == b

를 만족하는 p, q를 2중반복문을 사용하여 답을 도출하면 끝

쉬운 문제였다. 피타고라스 정리는 이렇게 풀리지 않는 것이 안타깝다.


'알고리즘문제풀이' 카테고리의 다른 글

도블릿_rank sort  (0) 2015.04.06
더블릿_소인수분해  (0) 2015.04.03
더블릿_피타고라스 정리  (0) 2015.04.03
2504_괄호의 값  (0) 2015.04.02
2493_탑  (0) 2015.04.01
Posted by slender ankles
,

c라는 정수가 주어졌을 때 

a제곱 * b제곱 = c제곱

인 a, b를 찾는 문제였다. 


c제곱 - a제곱 = b제곱 이라는 것을 이용하여

a, b for문을 두 개 이용하는 것이 아니라 a에 대한 for문 한 개만 이용하여 푸는 방법인데

c제곱 - a제곱의 sqrt(루트)가 자연수이면 그 것은 성립된다는 것으로 생각하면 된다. 


문제는 소수점에 대한 double형인지 소수점 없이 나누어 떨어지는지에 대해서 알 필요가 있다고 생각했다. 

소수판별은 c제곱 - a제곱인 b제곱인 b를


다시 a제곱 * b제곱 == c제곱 인지 검사해줬다.

이렇게 되면 b가 소수점이 나오게 되면 다른 값이 나올 테니까...


테스트케이스 7개까지 통과 했다. 

이 테스트케이스에서 막혔다 ㅡㅡ ㅜ


118276


다시 풀어 봐야 겠다.


--------------------------------

풀렸다

실수를 했다. a에 대한 for문을 돌리면서 습관적으로 int형으로 선언한 뒤에 돌렸다.

생각해보니까 long long으로 선언해서 돌려야 한다. 

for(long long a = 1; a < c; a++)

이런식으로 돌려되는 것을 long long이 아닌 int로 선언해서 된 오류였다.




'알고리즘문제풀이' 카테고리의 다른 글

더블릿_소인수분해  (0) 2015.04.03
더블릿_인수분해  (0) 2015.04.03
2504_괄호의 값  (0) 2015.04.02
2493_탑  (0) 2015.04.01
1068_트리  (0) 2015.04.01
Posted by slender ankles
,

이 문제를 푸는 데 정말 많은 시간이 걸렸던 거 같다. 

우선 문제에 대해서 간략이 정리하자면, 

'(' 또는 ')', '[', ']'로 구성된 문자열들이 입력으로 주어진다. 

() => 2점 , 

[] => 3점, 

(X) => X*2점, 

[X] => X*3점, 

XY => X + Y의 규칙을 가진다. 

이 점수를 계산하라는 문제였다. 

문제의 핵심은 괄호들을 stack에 쌓이면서 중간중간의 연산된 값 역시 같이 스택에 쌓는 것이다

또 문제에서 잘못된 입력에는 0을 뱉으라고 했으므로 이에 대한 조건이 필요하다. 

예외) 

(1) 모든 입력에 대한 연산이 끝났는데도 stack에 괄호가 남아있을 때

(2) 연산도중 stack에서 짝이 안 맞는 괄호가 나왔을 때 

(3) 연산도중 stack이 비어 버릴 때

이렇게 3가지 정도의 예외를 하드코딩으로 박아줬더니 답이 나왔다. 

'알고리즘문제풀이' 카테고리의 다른 글

더블릿_인수분해  (0) 2015.04.03
더블릿_피타고라스 정리  (0) 2015.04.03
2493_탑  (0) 2015.04.01
1068_트리  (0) 2015.04.01
1991_트리순회  (0) 2015.04.01
Posted by slender ankles
,

STACK을 사용해야겠다는 직감을 가져야 하는 문제이다. 

약간의 생각이 필요한 듯 싶다. 그래서 정답률이 20% 대 인거 같다.

나는 이 문제에 대해서 실마리를 듣고 나서 풀었다. 

다시 풀었더니 그래도 잘 안 풀렸다. 이런 문제는 몇 번 더 풀어봐야 할 꺼 같다. 


문제의 조건에 맞추어 입력값들이 최대 50000개정도는 들어 온다고 하였으므로 다음과 같은 변수자료들을 선언했다.

STACK과 result[500005]

송신탑을 입력 받으면서 몇 가지 조건문을 통과해야 한다. 

1) 만약 스택이 비어있다면 result[현재인덱스] = 0 으로 저장되며

지금 있는 값은 stack에 저장한다.

2) 만약 stack의 top이 현재입력값보다 크면 stack의 top의 인덱스가 result에 저장된다.

3) 만약 stack의 top이 현재입력값보다 작으면 stack의 top은 pop된다. 


이와 같은 프로세스를 거쳐주게 되면 답을 구할 수 있다. 

'알고리즘문제풀이' 카테고리의 다른 글

더블릿_피타고라스 정리  (0) 2015.04.03
2504_괄호의 값  (0) 2015.04.02
1068_트리  (0) 2015.04.01
1991_트리순회  (0) 2015.04.01
더블릿_달팽이  (0) 2015.03.30
Posted by slender ankles
,
문제는 트리가 주어진다. 그 중 삭제 할 노드도 주워진다.

리프노드(자식이 없는 노드)의 개수를 찾아라.


dfs로 돌아다니면서, dfs를 수행하는 노드 중 다른 곳으로 재귀호출을 하지 않는 노드는 리프노드라고 판단했다.

맞는 것 같다. 그런데 답이 나오지 않았다. 


다시 문제를 들여다 보면서 알아 낸 것은 

=> 만약 부모가 없다면 (루트) -1이 주어진다. 

이 조건이다. 

트리가 반드시 하나라는 보장은 없었던 것이다. 트리는 2개일 수도 세 개 일수도 있다. 

몇 가지 소스부분을 고치고 제출했더니 통과



'알고리즘문제풀이' 카테고리의 다른 글

2504_괄호의 값  (0) 2015.04.02
2493_탑  (0) 2015.04.01
1991_트리순회  (0) 2015.04.01
더블릿_달팽이  (0) 2015.03.30
더블릿_미 로(labyrinth)  (0) 2015.03.29
Posted by slender ankles
,

트리 문제를 만났을 때, 배열을 통해서 구현 할 것인지 아니면 구조체를 통해서 구현해야 하는지에 대해서

항상 고민하게 된다. 

보통 배열을 쓰는 것이 더 직관적이고 습관화가 잘 되어있어서 편하지만 배열을 사용 할 수 없는 경우에는 이러한 습관이 또 독이 되는 것 같다. 


이번 문제는 배열을 써도 문제 없었다. 

노드의 개수는 26개까지 제한이 있었는데, 배열을 완전이진트리 형태로 만들어놓아도 큰 문제는 없었다. 


트리를 입력 받는 부분에서 지금까지와 다른 입력 형식이어서 살짝 고민했지만

인덱스를 관리해주는 배열을 따로 만들어서 풀어나갔다. 이런 부분은 그냥 경험으로 체득하는 것 같다. 


완전 이진트리를 만들어놓고 전위, 중위, 후위 순회하는 것은 별로 어렵지는 않았다.  


구조체를 사용해서 푸는 방법과 배열을 부모를 저장하는 형식으로 만들어내는 방법으로도 한 번 풀어볼 필요가 있을 것 같다. 

'알고리즘문제풀이' 카테고리의 다른 글

2493_탑  (0) 2015.04.01
1068_트리  (0) 2015.04.01
더블릿_달팽이  (0) 2015.03.30
더블릿_미 로(labyrinth)  (0) 2015.03.29
더블릿_이진트리방문1  (0) 2015.03.29
Posted by slender ankles
,

노드js의 모듈화는 어떻게 시킬까?


nodejs를 시작한지 얼마 되지 않았는데 


각 역할에 맡게 자바스크립트 파일들을 나누어놓았고 서로 독립적인 영역으로 최대한 구분할려고 했다.


하지만 디비는 모든 스크립트에서 다 쓰는데, 매번 디비를 선언하고 연결해야 하나?


좋지 않은 방법 같다. 


그래서 dbcontroller.js라는 파일을 만들어놓고 이를 각 스크립트에서 불러와서 쓰는 방법을 사용하고자 한다. 

간단히 모듈화하는 부분을 나타낸다. 맨 마지막에 exprts하는 부분이 포인트이다. 


 




Posted by slender ankles
,

매트릭스의 위치좌표를 변경하고, 매트릭스의 회전각을 조정하고, 매트릭스의 크기를 조정하는 작업을 동시에 했다.

이미지가 얼마나 커지는 지를 체크 할 필요가 있었다. 이미지의 배율을 구해서 변화폭을 관찰해야 하는 부분을 구현해야 했다.


하지만 0도일때는 잘 구해지던 것이 90에서는 안 구해지고 180에서는 구해지는데 270도에는 안구해졌다. 


float[] matrixValues = new float[9];

matrix.getValues(matrixValues);

matrixValues[Matrix.MSCALE_X];


위와 같은 코드를 통해서 가로의 크기를 구해줄려고 했는데 ,,,,, 0도에서는 잘 구해지다가 90도에서는 0을 뱉어냈다 ㅜㅜ 270도에서도 0을 반환했다. 


아 .... 수학적인 문제인가를 생각해서 계속 구글링을 하면서 찾아봤는데 좋은 답이 안 나왔다. 


도저히 안되서 matrixValues배열은 3*3 행렬이므로 for문으로 값들을 돌려봤다.


그런데 .... 나의 심각한 오판이 있었다. matrixValues[0]의 값이 0도 일때는 스케일의 배율값이었는데 

90도 일때는 스케일의 배율값이 아니었다. ㅡㅡ 

각도가 바뀔 때마다 각 속성이 뒤바뀌었다. 


정확한 이유는 쫌 더 공부를 해봐야 하겠지만 ....


어쨋든 정리하자면 

for문을 돌려보면서 0도 90도 180도 270도 일 때의 스케일의 배율을 나타내는 값을 찾아내서 

if문 4개에 넣어주었다. 

Posted by slender ankles
,

필요한 구현 사항

매트릭스를 원하는 부분으로 postTranslate && 매트릭스를 원하는 회전각으로 postRotate && 매트릭스를 원하는 크기만큼 늘려야 한다. 


초기의 매트릭스 속성을 대입한 bitmap 이미지를 ImageView에 적용 시키면 좌측 상단에 이미지뷰가 위치하게 됐다. 

 ** 매트릭스의 초기값은 0, 0 => 매트릭스에서 0, 0은 화면의 좌측 상단을 의미한다. 

 

소스 코드를 보면서 설명하겠다.


Posted by slender ankles
,

picasso라이브러리를 사용하고 있었고, url을 통해서 이미지를 가져오는 상황이었다. 

이 이미지뷰에서 bitmap을 추출하고 싶었는데 보통의 이미지뷰에서 bitmap을 추출하는 방법으로는 가능하지 않았다. 

어떠한 방법을 쓰더라도 nullpointer exception이랑 runtime exception이 났다. 


-- 다음과 같은 이유를 알고 성공이 가능했다. 

!!!***** 잘 못된 접근을 하고 있어서 nullpointer exception이 났던 것이었다.

나의 이미지뷰는 resource에서 받아오는 것이 아니라 통신을 통해 Picasso 라이브러리에서 url을 통해

이미지를 받아오는 것이었기 때문에 이미지 사이즈도 측정 불가능하고 비트맵으로 변환시 nullpointer exception이 났던 것이었다. 


다음과 같이 Picasso에서 제공해주는 Target이라는 implements해주면 된다. 


Posted by slender ankles
,