문제 : http://www.programming-challenges.com/pg.php?page=downloadproblem&probid=110502&format=html

Status : Solved
#include <iostream> using namespace std; unsigned int reverse(unsigned int input); int main(void) { unsigned int numberOfTestcase, input, i; cin >> numberOfTestcase; for(i = 0; i < numberOfTestcase; i++) { int count = 0; cin >> input; if(input == reverse(input)) { cout << 0 << " " << input << endl; } else { while((input = input + reverse(input)) != reverse(input)) { count++; } cout << ++count << " " << input << endl; } } return 0; } unsigned int reverse(unsigned int input) { unsigned int result = 0; while(input > 0) { result *= 10; result += input % 10; input = input / 10; } return result; }
Posted by RyuiSaka

iTMS(iTunes Music Store)에서 다운받은 파일의 경우 DRM이 걸려있다.
최근에 iTMS Plus에서 DRM Free 파일을 판매하기도 하지만 종류도 적고 가격도 DRM걸린 파일보다 비싸다.
iTMS DRM이 걸려있는 파일의 경우 iTunes나 iPod에서밖에 재생이 안되기때문에 불편하다.
다른 MP3P에서 재생하기 위해서는 이 DRM을 풀어야하는데, 그 방법을 소개한다.
인터넷을 살펴보면 iTMS DRM을 풀기위한 툴이 여러가지 존재하는데, 제대로 실행이 안되는 툴들이 대부분이었다.
안되면 그냥 안쓰자 주의라서;; 찾다가 제대로 동작하는 툴을 찾았다.
바로 QTFairUse6이다.
사이트는 http://www.hymn-project.org/forums/viewtopic.php?t=1553 이다.
우선 해당 사이트를 방문해서 프로그램 파일을 다운로드 받는다.

사용자 삽입 이미지

위에 붉은색으로 표시된 부분이 다운로드 받을 파일이다.
밑에 소스코드는 필요하면 받아서 수정하든지 Python으로 직접 실행하면 된다.
하지만 귀찮으므로 그냥 실행파일 들어있는걸로 받아라 -_-;
파일을 다운로드 받았다면 적당한 폴더에서 압축을 해제한다.

사용자 삽입 이미지

압축을 해제한 상태의 파일 리스트이다.
압축 푼 폴더 내에 실행파일이 두개 보이는데 QTFairUse6.exe 파일이 Win32 Application이고, QTFairUse6console.exe는 콘솔에서 작동하는 Application이다.
취향에 맞게 실행하면 되는데, 콘솔보다는 Win32 Application이 훨씬 편리하다.
일단, 프로그램을 실행하라.

사용자 삽입 이미지

프로그램을 실행한 화면이다.
이것저것 복잡한게 영어로 써 있으니 머리아프겠지만 필요한건 몇개 안된다.
일단 맨 위에 라디오버튼으로 되어있는 부분부터 설명한다.
'Process all protected files in iTunes library'는 iTunes Library에 포함된 모든 DRM파일을 DRM Free 파일로 변환할 때 사용하는 옵션이다.
그 밑에 'Process just these files(drag files from Explorer onto this list to add them)'옵션은 몇개의 파일을 골라서 DRM Free로 변환할 때 사용하는 옵션이다.(탐색기에서 바로 드래그해서 리스트에 추가할 수 있단다)
이 글에서는 두번째 옵션을 이용해서 변환하려고 한다.
두번째 옵션을 선택하면 'Add files...'와 'Remove selected'버튼이 활성화 된다.
'Add files...'버튼을 눌러서 파일을 추가하든지 탐색기상에서 바로 드래그 해서 파일을 추가하든지 그건 자유다.
맘대로 하면 된다;;
어쨌거나 파일을 리스트에 추가하면 아래와 같은 화면이 나온다.
실수로 파일을 잘못 추가했으면 해당 파일을 선택하고 'Remove selected'버튼을 클릭하면 된다.

사용자 삽입 이미지

파일리스트 밑에 보면 여러가지 옵션이 체크박스 형태로 나와있다.

 - Decrypt protected files : DRM이 걸려있는 파일을 복호화 한다.(즉, DRM Free 파일로 만든다)
 - Do decrypt even if decrypted version already exists : 이미 복호화 되어있는 파일이 존재할 경우, 다시 복호화 할것인지 여부를 결정하는 옵션
 - Automatically replace protected files with new decrypted files in the iTunes library and all playlists : 자동으로 iTunes Library와 모든 Playlist상에 들어있는 DRM파일들을 복호화된 파일로 교체해주는 옵션
 - Backup your current iTunes library index files before starting : iTunes library index 파일을 백업하는 옵션
 - After decryption, move original protected files to the backup folder : 복호화 후에 DRM이 걸려있는 원래 파일을 백업폴더로 옮길지 여부를 결정하는 옵션

그 밑에는 백업폴더의 경로를 선택할 수 있는 부분이 있다.

모든 옵션을 다 확인했으면 'Start conversion' 버튼을 누른다.

사용자 삽입 이미지

그러면 위와 같은 과정을 거치면서 확장자가 m4a 파일이 생성된다.(원본은 확장자가 m4p이다)
이 파일이 DRM이 풀린 파일이다.
아래는 탐색기상에서 원본파일과 DRM이 풀린 파일의 모습이다.

사용자 삽입 이미지

이제 DRM이 풀렸다.
하지만 최종 목적은 어떠한 MP3P에서도 재생되는 MP3 파일을 생성하는 것이다.
m4a 파일은 iTunes에서밖에 재생되지 않기때문에 이 파일을 MP3 형식으로 변환하는 과정이 필요하다.
이 작업은 iTunes 자체에서 지원하기때문에 쉽게 할 수 있다.
일단 DRM이 풀린 파일을 iTunes에서 보관함이나 구입함에 추가한다.
iTunes를 사용해봤다면 어떻게 하는것인지 다들 알거라 믿고 따로 설명은 안한다.

사용자 삽입 이미지

파일 추가를 했다면 위와 같이 MP3로 변환할 파일(DRM이 풀린 파일)을 선택한 후 오른쪽마우스 클릭 후에 '선택항목을 MP3로 변환' 버튼을 눌러준다.
그럼 iTunes가 알아서 MP3 파일로 변환해준다.
참고로 오른쪽마우스를 클릭했더니 '선택항목을 MP3로 변환' 이라는 항목이 없다면 iTunes 옵션을 만져줘야된다.
위에 메뉴바에서 편집을 클릭하면 여러가지 메뉴가 뜨는데, 거기서 '기본 설정'으로 들어간다.
그럼 아래와 같은 창이 뜬다.

사용자 삽입 이미지

위에서 붉은색으로 표시된 부분을 설정해주면 된다.
'선택항목을 MP3로 변환' 이라는 항목이 없다면 아마 저부분이 AAC인코더나 Apple lossless인코더로 설정되어있는것이다.
그걸 MP3 인코더로 바꾼 뒤에 음질을 적당히 조절하면 된다.
참고로 음질의 숫자를 높일수록 고음질의 파일이 생성되지만, 192kbps가 넘어가면 거의 구분할 수 없으니 용량절감을 위해 192kbps 정도로 해두는게 가장 좋다.
설정이 다 끝났다면 '선택항목을 MP3로 변환' 버튼을 클릭해서 MP3 파일로 변환하면 모든 작업이 끝난다.


다시한번 말하지만 이러한 과정을 통해서 불법복제를 하자는게 아니라 정당하게 돈 내고 받은 파일을 가지고 있는 MP3P에서 듣고자 하는것이다.
MP3 파일 하나때문에 iPod을 사기는 돈 아깝지 않은가? ;-) (애초에 iTMS가 아닌 국내 사이트에서 다운받으면 모든게 해결되지만...iTMS에서만 구입할 수 있는 곡도 많다)
해보고 잘 안되거나 이해가 안가는 부분이 있다면 개인적으로 문의하시길;;

* 직접 작성한 글입니다. 글 내용을 스크랩 하거나 다른곳에 가져갈분은 미리 말씀하시길.
Posted by RyuiSaka

 

문제풀이 시간 : 10분(코딩 포함)
Solved 받아낼때까지 걸린 시간 : 1시간

그동안 Wrong Answer로 일관하던 Programming Challenges 로봇이 드디어 'Solved'를
뱉어냈다;;
문제는 경계값도 아니고 입력문제도 아니고 기본자료형의 최대크기문제???
Visual C++에서는 int형을 4바이트로 처리하기때문에 1,000,000이라는 숫자를 다룰 때 문제가
없지만 Programming Challenges의 로봇이 사용하는 컴파일러는 아마도 int형을 2바이트로
처리하는듯 하다.
그래서 65535를 넘어가면 문제를 일으켜서 'Wrong Answer'를 뱉어낸것 같다.
하지만 Runtime이 3초가 넘는걸 보면 알고리즘을 엄청나게 비효율적으로 설계한듯;;
Best Time이 0.008초로 나와있는데....대체 어떻게 알고리즘을 설계했길래 저런 시간이
나올 수 있는겐지;;
암튼 오랫동안 답을 얻지 못했던 문제를 풀어서 뿌듯하다.(물론 오래전에 문제를 풀긴 했으나
로봇덕분에 삽질을 계속 했었다;)

Posted by RyuiSaka

SoC는 이제 카메라테스트까지 남은 시간동안 손 떼도 될것같고 이번주는 ACM에 올인 예정.
ACM을 너무 소홀히 한건가;;
오랜만에 문제를 풀려니 풀리지가 않네;;
그나저나 SoC 준비하느라 고생한 우리 팀원들 모두 수고하셨습니다.
한게 없어서 민망하긴 하지만;;
그래도 끝냈네요...

아래 사진은 밤샘과 노가다의 산물.

사용자 삽입 이미지


사용자 삽입 이미지
Posted by RyuiSaka
A.in

Sample Test Case


문제 : http://cv.chonbuk.ac.kr/~alps/problem/icpc2004/2004oa.pdf

A게 답게 쉬웠던 문제.
예외처리는 안했음.
귀찮아서.
Posted by RyuiSaka

gift1.cpp

Source Code

gift1.in

Sample Input



영어문제는 항상 해석하는게 귀찮다;;
문제 자체는 쉬움.
----

Greedy Gift Givers

A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange gifts of money. Each of these friends might or might not give some money to any or all of the other friends. Likewise, each friend might or might not receive money from any or all of the other friends. Your goal in this problem is to deduce how much more money each person gives than they receive.

The rules for gift-giving are potentially different than you might expect. Each person sets aside a certain amount of money to give and divides this money evenly among all those to whom he or she is giving a gift. No fractional money is available, so dividing 3 among 2 friends would be 1 each for the friends with 1 left over -- that 1 left over stays in the giver's "account".

In any group of friends, some people are more giving than others (or at least may have more acquaintances) and some people have more money than others.

Given a group of friends, no one of whom has a name longer than 14 characters, the money each person in the group spends on gifts, and a (sub)list of friends to whom each person gives gifts, determine how much more (or less) each person in the group gives than they receive.


IMPORTANT NOTE

The grader machine is a Linux machine that uses standard Unix conventions: end of line is a single character often known as '\n'. This differs from Windows, which ends lines with two charcters, '\n' and '\r'. Do not let your program get trapped by this!


PROGRAM NAME: gift1


INPUT FORMAT

Line 1: The single integer, NP
Lines 2..NP+1: Each line contains the name of a group member
Lines NP+2..end: NP groups of lines organized like this:
The first line in the group tells the person's name who will be giving gifts.
The second line in the group contains two numbers: The initial amount of money (in the range 0..2000) to be divided up into gifts by the giver and then the number of people to whom the giver will give gifts, NGi (0 ≤ NGi ≤ NP-1).
If NGi is nonzero, each of the next NGi lines lists the the name of a recipient of a gift.

Posted by RyuiSaka

Linux Life~

세상살이 2007.06.22 21:34
사용자 삽입 이미지

OS과제때문에 Linux를 설치했다.
Fedora만 써오다가 ubuntu를 설치했는데, 이것 참 물건이다.
일단 Fedora에서 기를쓰고 잡아보려고 했던 무선랜카드를 설치하자마자 자동으로 잡아줘서
이미 합격점 -_-;
Beryl을 설치하니 비스타만큼이나(비교하기도 좀 그렇지만;;_) 예쁜 데스크탑 환경;
바탕화면은 ubuntu 컨셉으로 둘러서 있는 키티들...귀엽다;;
이제 .NET 개발할일만 없으면 윈도 없이도 살 수 있을것같다.
요 며칠 사이에 윈도는 거의 안쓰고 리눅스에서만 놀고 있다. 푸푸....
이번학기 OS수업때문에 정떨어져버린 리눅스인데;;
이제 좀 친해져봐야겠다.
잊어버렸던 명령어들도 익히고 말이지.
일단 지금은 OS과제를 끝내야한다 -_-;
내 방학은 언제쯤....?
Posted by RyuiSaka