1. A method of operating a non-volatile memory, comprising: calculating a number of data bits from data to be programmed into a non-volatile memory in a program operation; programming the data into the non-volatile memory; verifying the data programmed into the non-volatile memory and calculating a number of data bits that failed to program; and increasing a programming voltage in response to a comparison of the number of data bits in the data and the number of data bits from the data that failed to program.