본문 바로가기

Algorithm/Algospot

[algospot]ENDIANS

문제

https://algospot.com/judge/problem/read/ENDIANS

걸리버여행기에 나오는 두 섬나라인 소인국 릴리풋(Lilliput) 과  거인국 블루푸스쿠(Blefuscu)는 서로 너무 너무 너무 싫어해서 삶은 달걀을 깨는 방법가지고도 싸운답니다. little end(끝이 뾰족한부분)을 깨는 방법과 big end(끝이 둥근 부분)을 깨는 방법으로 전쟁까지 하게되는데요~ㅎㄷㄷ(자세한건...걸리버여행기를 읽어보세요~~)

두나라의 컴퓨터에서의 정수를 저장할 때 byte의 순서를 다른 방법으로 저장한다. 두나라의 정보교환을 위해서 변환이 필요하다.

예) 0x1234 






little-endians 0011 0100 0001 0010
 big-endians 0001 0010 0011 0100

즉, 요약하면 엔디안변환....끝

 

입력

테스트케이스의 수는 1이상 10000이하. 각 케이스의 입력은 32bit unsigned integer가 들어온다. 0부터 2^32-1까지 들어올수 있다. 자바라면 long을 써야될것같다.

 

출력

변환된 수

 

풀이

입력된 수를 16진수로 바꿨을때 8비트씩 쪼갠뒤에 이 값들을 shift하면 될것같다. 즉 0x1234&0xff00 하면 0x1200만 가져올수 있고 여기에서 0x1200>>8하면 0x12가된다. 나머지 부분도 (0x1234&0x00ff)<<8 한뒤에 두 결과를 합치면 변환이 될것이다. 

 

package com.tutorial;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Endians {
    public static void main(String[] args)throws NumberFormatException,
    IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System. in));
        int cnt = Integer.parseInt(br.readLine());
        while (cnt -- > 0) {
            Long a = Long.valueOf(br.readLine());
            System.out.println(((a & 0x000000ff l) << 24) | ((a & 0x0000ff00 l) << 8) | ((a & 0x00ff0000 l) >> 8) | ((a & 0xff000000 l) >> 24));
        }
    }
}

 

'Algorithm > Algospot' 카테고리의 다른 글

[algospot]MISPELL  (0) 2014.12.11
[algospot]ENCRYPT  (0) 2014.12.11
[algospot]LECTURE  (0) 2014.12.11
[algospot]MERCY  (0) 2014.12.11
algospot start  (0) 2014.12.11