평소에 전공 공부를 열심히 하는 황제는 시험기간에 형들이 IPv4, IPv6주소를 저장하는데 각각 최소 4바이트, 6바이트가 필요하다는 얘기를 듣고 아람이에게 질문했다.
여러분이 황제를 도와 아람이와 황제가 점심시간에 맞춰 밥을 먹도록 도와주자.
입력의 첫째 줄에 테스트 케이스 T가 주어진다.
각 테스트 케이스의 첫 줄에는 변환의 종류를 나타내는 값 M과 변환할 값 N이 주어진다.
M은 IPv8 주소를 부호가 없는 정수로 바꾸는 변환이면 1, 부호가 없는 정수를 IPv8 주소로 바꾸는 변환이면 2가 주어진다.
N은 M이 1일 경우 0~255사이의 정수로 이루어진 IPv8 주소, M이 2일 경우 부호가 없는 정수가 주어진다.
주어지는 부호가 없는 정수의 크기는 64비트 부호가 없는 정수의 범위를 넘어가지 않는다.
각 테스트 케이스마다 변환된 값을 출력한다.
3
1 70.236.217.197.157.238.150.80
2 5110699119940114000
2 0
5110699119940114000
70.236.217.197.157.238.150.80
0.0.0.0.0.0.0.0
import sys
'''
그냥 구현인데?
'''
def change_to_ipv8(string):
change_to_bin = bin(int(string))[2:].zfill(64)
answer = []
for i in range(0, len(change_to_bin), 8):
answer.append(str(int(change_to_bin[i:i+8], 2)))
return ".".join(answer)+'\n'
def change_to_num(string):
array = string.split('.')
bin_string = ""
for num in array:
bin_string += bin(int(num))[2:].zfill(8)
return str(int(bin_string, 2))+'\n'
def main():
inputs = sys.stdin.read().split()
t = int(inputs[0])
for i in range(1, t*2+1, 2):
if inputs[i] == '1':
sys.stdout.write(change_to_num(inputs[i+1]))
else:
sys.stdout.write(change_to_ipv8(inputs[i+1]))
if __name__ == '__main__':
main()
또 나와버린 단순 구현 문제.
이제는 실버 2~부터 골드 3까지 랜덤 디펜스를 할 예정. 그리고 gibhub 블로그를 해볼 생각이다. 다 만들면 이동 예정.
import java.io.*;
import java.math.BigInteger;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
FastReader fr = new FastReader();
int t = fr.nextInt();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < t; i++) {
String mode = fr.next();
if (mode.equals("1")) {
String ip = fr.next();
String[] parts = ip.split("\\.");
StringBuilder binBuilder = new StringBuilder();
for (String part : parts) {
int num = Integer.parseInt(part);
String binPart = Integer.toBinaryString(num);
binPart = String.format("%8s", binPart).replace(' ', '0');
binBuilder.append(binPart);
}
BigInteger result = new BigInteger(binBuilder.toString(), 2);
sb.append(result.toString()).append("\n");
} else if (mode.equals("2")) {
String numStr = fr.next();
BigInteger number = new BigInteger(numStr);
String bin = number.toString(2);
bin = String.format("%64s", bin).replace(' ', '0');
String[] ipParts = new String[8];
for (int j = 0; j < 8; j++) {
String segment = bin.substring(j * 8, (j + 1) * 8);
int partValue = Integer.parseInt(segment, 2);
ipParts[j] = String.valueOf(partValue);
}
sb.append(String.join(".", ipParts)).append("\n");
}
}
System.out.print(sb.toString());
}
static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
String next() throws IOException {
while (st == null || !st.hasMoreElements()) {
st = new StringTokenizer(br.readLine());
}
return st.nextToken();
}
int nextInt() throws IOException {
return Integer.parseInt(next());
}
long nextLong() throws IOException {
return Long.parseLong(next());
}
double nextDouble() throws IOException {
return Double.parseDouble(next());
}
String nextLine() throws IOException {
return br.readLine();
}
}
}