[Java] UVa 848번 문제 - fmt 

onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=10&page=show_problem&problem=789

 

Online Judge

848 - Fmt Time limit: 3.000 seconds

onlinejudge.org

문제 설명

 

내 코드

import java.io.*;
import java.util.*;

class Main {
	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);
		
		int max = 72;
		String paragraph ="";
		
		while(scanner.hasNextLine()){
			String input= scanner.nextLine();
			if(!input.equals(""))
				paragraph+=input+" ";
			if(input.equals("") || !scanner.hasNextLine()){
				//System.out.println("->"+paragraph);
				
				String first="";
				int j=0;
				
				while(paragraph.charAt(j)==' '){
					first+=paragraph.charAt(j);
					j++;
				}
				
				String output="";
				output+=first;
				//System.out.println("->"+first);
				paragraph=paragraph.trim();
				
				
				String[] dic = paragraph.split(" ");
				//System.out.println("->"+Arrays.toString(dic));
				if(dic.length==1){
					System.out.println(paragraph);
				}
				else{
					for(int i=0; i<dic.length;i++){
						if((output.length() + (dic[i].length()+1)) >72 && i==dic.length-1){
							System.out.println(output);
							System.out.println(dic[i]);
						}
						else if((output.length() + (dic[i].length()+1)) >72 && i==0){
							output=dic[i];
						}
						else if(i==dic.length-1){
							output+=" "+dic[i];
							System.out.println(output);
						}
						else if((output.length() + (dic[i].length()+1)) <=72 && i==0){
							output+=dic[i];
						}
						else if((output.length() + (dic[i].length()+1)) <=72){
								output+=" "+dic[i];
						}
						else{
							System.out.println(output);
							output=dic[i];
						}
					}
				}
				paragraph="";
				System.out.println("");
			}
		}
		
		
	}
}

 

🎨 Key Point 

전체 줄을 합친 다음에 단어 하나하나를 Split하여 72개가 넘는지 안넘는지에 초점을 맞췄다. 

거의 때려 맞추기 식으로 맞춘 풀이라 더 좋은 풀이가 있을거라 생각 된다.

 

[Java] 월도르프를 찾아라 Where's waldorf?  - UVa 10010번 문제

 

문제 설명

 

내 코드

import java.io.*;
import java.util.*;

class Main {
	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);
		
		int n = scanner.nextInt();
		scanner.nextLine();
		
		for(int i=0; i<n ; i++){
			scanner.nextLine();
			int rows = scanner.nextInt();
			int columns = scanner.nextInt();
			scanner.nextLine();
			
			String [] line = new String[rows];
			
			for(int j=0; j<rows; j++)
				line[j]=scanner.nextLine().toLowerCase();
			
			
			int output = scanner.nextInt();
			scanner.nextLine();
			
			for(int j=0; j<output;j++){
				String name= scanner.nextLine().toLowerCase();
	
				
				int output_r=-1;
				int output_c=-1;
				
				for(int row=0; row<rows;row++){
					for(int column=0; column< columns; column++){
						
						if(line[row].charAt(column) == name.charAt(0)){
							int leng = name.length();
							boolean up    = (row+1)  >= leng;
							boolean left  = (column+1) >= leng;
							boolean right = (columns-column) >= leng;
							boolean down  = (rows-row) >= leng;
							
							if(up){
								boolean is_found = true;
								for(int k=0; k<leng;k++){
									if(name.charAt(k)!=line[row-k].charAt(column))
									 	is_found = false; break;
									
								}
								if(is_found){
									output_r= row +1;
									output_c =column+1;
									break;
								}
								
							}
							if(left){
								boolean is_found = true;
								for(int k=0; k<leng;k++){
									if(name.charAt(k)!=line[row].charAt(column-k)){
									 	is_found = false; break;
									}
								}
								if(is_found){
									output_r= row +1;
									output_c =column+1;
									break;
								}
								
							}
							if(right){
								boolean is_found = true;
								for(int k=0; k<leng;k++){
									if(name.charAt(k)!=line[row].charAt(column+k)){
									 	is_found = false; break;
									}
								}
								if(is_found){
									output_r= row +1;
									output_c =column+1;
									break;
								}
							}
							if(down){
								
								boolean is_found = true;
								for(int k=0; k<leng;k++){
									if(name.charAt(k)!=line[row+k].charAt(column)){
									 	is_found = false; break;
									}
								}
								if(is_found){
									output_r= row +1;
									output_c =column+1;
									break;
								}
								
							}
							if(up && left){
								
								boolean is_found = true;
								for(int k=0; k<leng;k++){
									if(name.charAt(k)!=line[row-k].charAt(column-k)){
									 	is_found = false; break;
									}
								}
								if(is_found){
									output_r= row +1;
									output_c =column+1;
									break;
								}
								
							}
							if(up&&right){
								
								boolean is_found = true;
								for(int k=0; k<leng;k++){
									if(name.charAt(k)!=line[row-k].charAt(column+k)){
									 	is_found = false; break;
									}
								}
								if(is_found){
									output_r= row +1;
									output_c =column+1;
									break;
								}
								
							}
							if(down&&left){
								
								boolean is_found = true;
								for(int k=0; k<leng;k++){
									if(name.charAt(k)!=line[row+k].charAt(column-k)){
									 	is_found = false; break;
									}
								}
								if(is_found){
									output_r= row +1;
									output_c =column+1;
									break;
								}
							
							}
							if(down && right){
								
								boolean is_found = true;
								for(int k=0; k<leng;k++){
									if(name.charAt(k)!=line[row+k].charAt(column+k)){
									 	is_found = false; break;
									}
								}
								if(is_found){
									output_r= row +1;
									output_c =column+1;
									break;
								}
							
							}

						}
						
					}
					if(output_r!=-1 && output_c!=-1)
						break;				 										 
				}
				
				System.out.println(output_r +" "+ output_c);

			}

			System.out.println("");
			
		}

	}
}

 

 

🔑 Key Point 🔑

mxn 짜리 사각형에서 첫글자가 발견되는 곳 기준으로 8개의 방향을 다 조사 해야 한다. 

우선 길이가 안되면 조사할 필요가 없기 때문에 동,서,남,북으로 길이가 되는지 부터 

Boolean 타입으로 넣어놓으면 if문을 사용할 때 편하다.

leng은 찾을 단어의 길이이다.

boolean up    = (row+1)  >= leng;      
boolean left  = (column+1) >= leng;
boolean right = (columns-column) >= leng;
boolean down  = (rows-row) >= leng;

[Java] WERTYU 문제 -  UVa 10082번 Programming Challenges 문제 17번

 

문제 설명

 

 

내 코드

import java.io.*;
import java.util.*;


class Main {
	public static void main(String[] args) throws Exception {
		
		Scanner scanner = new Scanner(System.in);
		
		String keyboard = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;\'ZXCVBNM,./";
		
		while(scanner.hasNextLine()){
		String input = scanner.nextLine();
		
		
		for(int i=0; i<input.length(); i++){
			for(int j=0; j<keyboard.length(); j++){
				
				if(input.charAt(i)==' '){
					System.out.print(" ");
					break;
				}
				else{
					if(input.charAt(i)==keyboard.charAt(j))
						System.out.print(keyboard.charAt(j-1));
					else
						continue;
				}
				
				
			}
		}
		
		System.out.println("");
		
		}
	}
}

 

 

 

 

🔑 KeyPoint  🔑

 

한 배열에 모두 잡아주면 간단하게 해결할 수 있다

백슬래쉬는 String으로 표현하려면 \\ 이고, '는 \'으로 표현한다.

String keyboard = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;\'ZXCVBNM,./";

[Java] 10진수 대 16진수 

문제 설명

내 코드

import java.io.*;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    
		Scanner input = new Scanner(System.in);
        
		while (input.hasNextLine()) {
			String s = input.nextLine();
			if (s.charAt(0) == '0') {
				int hex = Integer.parseInt(s.substring(2), 16);
				System.out.println(hex);
			}
			else {
				int dec = Integer.parseInt(s);
				String hs = Integer.toHexString(dec);
				System.out.println("0x" + hs.toUpperCase());
			}
		}
        
        
	}
}

 

🔑 Key Point 🔑

String에 쓰는 str.substring(숫자) 함수 (숫자인덱스부터 끝까지 자름)

int를 16진수 String으로 만들어 주는 Integer.toHexString(int key);

+ Recent posts